您的位置:首页 > 数据库 > SQL

运维之mysql篇------2. MySQL 索引类型 、 MySQL 存储引擎

2017-11-10 16:45 676 查看
Two day

索引  类似与    书的目录

查字典:部首笔画   拼音

stuinfo

name    sex   age   class   s_year  birthday

键值

索引te点:

Index:普通索引: MUL  :表可多个index----可重复可null---对象经常作为查询条件

Unique:唯一索引 : UNI :可多个 ;不可重复 允许为null;(当修改为not null,变为主键PRI,但性质不同)

Fulltext;全文索引

Primary key: 主键 : PRI  :表只有一个(做唯一标识用)----不可重复不可nul----常与auto_increment连用l;  若多个称为复合主键

Foreign key:外键  使用条件:存储引擎必须是innodb;字段类型一致;被参照字段必须是索引类型的一种(primary key)

 

************************************

1.Index:

show  index  from 表名;    查看表中的index

使用:  使用规则   创建 查看  删除 

index使用规则?

创建index:   

create   index   索引名   on  表(字段);

create    index   abc  on  t22(name);   #在已有表里添加index字段

desc   t22;

show index  from 表名\G;              #查看表中index

drop  index  索引名  on  表名;

drop  index   abc  on  t22;        #删除跳t22表的index

create  table  库.表(             ##在未有表中创建index

字段列表,

index(字段名),

index(字段名),

index(字段名)

);

create  table   studb.t24(            

name  char(10)  ,

age  tinyint   unsigned  default 21,

sex   enum("boy","girl")  not null  default   "girl",

likes   set("film","game","music","it")  default   "film,game",

index(name),

index(sex)

);

********************************************************

主键的使用:

1.在未有表中创建主键

create  table  t25(      

字段名列表,

primary key(字段名)

);

create  table  t25(

stu_id  char(9),

name  char(10),

sex     enum("m","w"),

age     tinyint(2),

primary key(stu_id)

);

desc t25;

insert into  t25  values(null,"tom","m",21);

 

2.删除主键

alter  table  表 drop  primary key;

alter  table  t25 drop  primary key;

 

3.在已有表里添加主键

alter  table  表 add  primary key(字段名);

alter  table  t25 add  primary key(stu_id);

*****************************************************************

复合主键(多个字段一起做主键)

复合主键字段的值不允许同时相同

 

1.在未有表中创建复合主键

create  table   库.表(

字段名列表,

primary key(字段名列表)

);

create   table   t26(

cip   varchar(15),

serport   smallint,

status    enum("deny","allow"),

primary key(cip,serport)

);

insert  into   t26  values("1.1.1.1",21,"deny");

 

 

PRI         PRI

cip         serport      status

1.1.1.1   21               deny

2.1.1.1   21               allow

2.1.1.1   22               deny

2.1.1.1   22              allow

 

2.删除复合主键

alter  table   t26  drop  primary key;

 

3.在已有表里添加复合主键。

alter  table   表  add  primary key(字段名列表);

alter table   t26 add primary  key(cip,serport);

 

4.主键通常与 AUTO_INCREMENT 连用,实现字段值的自增长

               主键

               数值类型  i++    i=i+1

create  table    t27(

id    int    primary key   auto_increment,

name  char(10),

age   tinyint ,

sex    enum("man","girl"),

class  char(7)  default  "nsd1707"

);

 

insert into  t27(name,age,sex)  values("tom",21,"man");

 

create table t7( 

name  char(5), 

email  varchar(10), 

age tinyint 

); 

 t1          t2

name        name

varchar(4)     char(4)

    jerry           jerry

     lucy     lucy

      jim          jim 

      ab          ab  

      a               a

cpu 

日期时间类型    nsd1707

select   * from  t27  where id=2

******************************************888

unique唯一索引 

1.在未有表中创建unique字段:

create   table  t28(

name   char(10),             

hzid     char(5),         #对应显示UNI   

jsid      char(5) not null, #对应显示RPI

unique(hzid),

unique(jsid)

);

insert into  t28  values("jim","11111","33333");

          UNI

姓名   护照   驾驶证   身份证

 JIM   null    null      111111

 

2.删除unique  索引

drop index   索引名 on  表;

Drop index hzid on t28; 

 

3.在已有表里添加 unique  索引

create  unique  index   索引名 on  表(字段名);

Create unique  index  aaa   on  t28(hazid); 

Select * from

********************************************************************8

外键Foreign key

外键的使用:

外键使用规则?

1.创建外键

create  table   库.表(

字段名列表,

foreign key(字段名)  referencens  表A(字段名)   on  update cascade    on  delete cascade

)engine=innodb;

创建两个表,学费表,班级表,填了学费表cwtab的学生自动更新到班级表bjinfo.

cw_id  name  pay

学号     姓名    学费

create  table  cw_tab(

cw_id   int   primary key auto_increment,

name  char(10)not null,

pay  float(7,2) not null default  20000

Index(name),

)engine=innodb;

 

insert into cw_tab(name)values("tom"),("lucy"),("jerry");

select  * from  cw_tab;

 

bj_id   name  class

学号     姓名     班级

create  table   bjinfo(

bj_id  int primary key auto_increment,,

name  char(10) not null,

class  char(7) not null default  "nsd1707",

Index(name),

foreign  key(bj_id)  

references  cw_tab(cw_id)    

on  update cascade    
on  delete   cascade

)engine=innodb;

 

desc  bjinfo;   #查看班级表结构

show   create  table  bjinfo;

 

2.添加员工信息(学费默认20000,id号自动增长)

Insert into cw_tab(name) values(“liming”);

Insert into cw_tab(name) values(“zhang”);

Insert into cw_tab(name) values(“dong”);

3.验证外键

delete  from  cw_tab  where cw_id=2;

select  * from  bjinfo;

 

4.修改成员id 将4号变为8号

update  cw_tab set  cw_id=8  where cw_id=4;

select  * from  bjinfo;

 

删除外键

Show create table bijinfo;

alter table bjinfo drop foreign key bj_id;

* *********************************************************

Show engine;

 2.查看数据库可以使用的存储引擎

mysql>show engines;

YES DEFAULT NO

2.1修改数据库默认的存储引擎

vim/etc/my.cnf

 [mysql]

 default-storage-engine=存储引擎名

wq:

systemctl status mysqld

systemctl restart mysqld

mysql -uroot -pabc123

2.2 查看服务器上已有表使用的存储引擎

mysql>use db3;

mysql>show create table 表名;

2.3 修改服务器上已有表使用的存储引擎

mysql> alter table 表 engine = 存储引擎名;

2.4 键表时指定表使用的存储

mysql -uroot -pabc123

show engines;

create database db3;

desc db3;

use db3;

create table db3.t34(

id int(11)

)engine=innodb;

insert into db3.t31(id) values(201701);

desc t31;

select * from t31;

show create table t31;

 

3.工作常用的引擎名:myisam innodb

4.

myisam特点;不支持事物;不支持事物回滚 外键 支持表锁

t7.frm t7.MYD t7.MYI

表结构 表记录 索引信息

select name from t7 where name="tom";

innodb特点:支持事物;支持事物回滚 外键;支持行锁

锁的作用:解决多客户端并发访问冲突问题

锁类型:读锁  写锁

锁粒度:行锁  表锁

pc1 update t6 set name="tom" where name= "jim";

pc2 update t6 set name ="lucy" where name="jim";

delete insert update;

在myisam存储引擎会给整张表枷锁(表锁,另一个客户端无法操作此表,当第一个客户端操作完毕释放锁,才可以下一个,突出了并发少的特点)

在innodb存储引擎会给行枷锁(当另一个客户端访问五行(枷锁)之外的行进行读写操作,并发访问量高)

事务?一次sql操作从开始到结束,整个过程称为事务。

ATM机 转账

插卡 622

密码: 123456



当读取失败时会读取这个日志文件

事物日志文件:/var/lib/mysql

ib_logfile0 --

---sql命令

ib_logfile1 --

ibdata1  --数据信息

delete from db3.t1 where name="jim"

cd /var/lib/mysql

ls ib

ls -lh ib_logfile*

ls -lh ibdata1

事物特点:原子性 一致性 唯一性 隔离性

关闭自动提交功能  set autocommit=on/off;

开启事务 start transaction;

执行sql操作 insert update delete;

可以回滚rollback

手动执行提交操作commit

第一个终端:

use db3;

create table t6(id int) engine=innodb;

第二个终端:

mysql -uroot -pabc123 

show variables like "%commit%";

set autocommit=off;

start transaction;

insert into t6 values(99);

select * from t6;另一个终端select * from t6看不到数据

commit;(提交)另一个终端select * from t6看到数据

5.建表时如何决定表使用的存储?关键看客户端的访问量:人多用innodb,人少用myisam

执行写(insert update  delete )操作多的表适合使用innodb存储

执行读(select) 操作多的表适合使用myisam存储

pc2 读 10

pc3 select t6 50



create table t9 (id int)engine=innodb;

insert into t9 values(101);

select * frmom db3.t9

systemctl stop mysqld(内存消失)

systemctl start mysqld 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql index unique 主键