四、MySQL键值
索引介绍: 树状目录结构; 对记录集的多个字段进行排序的方法,类似与书的“目录”,类型包括 :Btree 、 B+tree 、 hash
优点:加快查询表记录的速度
缺点: 会减慢编辑表记录的速度,且占用磁盘的物理存储空间
键值:普通索引 唯一索引 全文索引 主键 外键
普通索引的使用(index)
使用规则:
一个表中可以有多个 INDEX 字段
字段的值允许有重复,且可以赋 NULL 值
经常把做查询条件的字段设置为 INDEX 字段
INDEX 字段的 KEY 标志是 MUL
创建索引
create index 索引名 on 表名(字段名); //在已有表创建索引,可以自定义索引名
EG:create index aaa on studb.t2(age);
create table 表名(字段列表,index(字段名),index(字段名)); //新建表时建立索引,索引名与字段名一致
create index xxx on t16(class);
create table t16(name char(15),age int(2),class char(7),index(name),index(class));
查看索引
desc 表名; //KEY 标志是 MUL 表示是索引项;
show index from 表名\G; //查看详细信息,加\G 分列显示
Table: t2 //表名
Key_name: age //索引名
Column_name: age //列名
Index_type: BTREE //类型,BTREE(二叉树)
删除索引
drop index 索引名 on 表名;
主键 primary key
(普通主键 复合主键 主键+auto_increment)
使用规则
一个表中只能有一个 primary key 字段
对应的字段值不允许有重复,且不允许赋 NULL 值
如果有多个字段都作为 PRIMARY KEY ,称为复合主键,必须一起创建。
主键字段的 KEY 标志是 PRI
通常与 AUTO_INCREMENT 连用
经常把表中能够唯一标识记录的字段设置为主键字段[ 记录编号字段 ]
查看主键
desc 表; //KEY 标志是 PRI
创建主键
在已有表创建 alter table 表 add primary key(字段名);
建表时创建 create table 表名(字段列表,primary key(字段名));
EG: alter table t21 add primary key(stu_id);
create table t17(id char(9) primary key,name char(10)); //该格式不能创建复合主键
create table t18(id char(9),name char(10),primary key(id));
alter table t17 add primary key(id);
删除主键
alter table 表 drop primary key;
复合主键的使用:多个字段一起做主键,插入记录时,只要做主键字段的值不同时重复,就可以插入记录。
创建:create table t19(cip char(15),serport smallint(2),status enum("yes","no"),primary key(cip,serport));
删除:alter table t19 drop primary key;
新增:alter table t19 add primary key(cip,serport);
主键primary key 通常和auto_increment连用,auto_increment让字段的值自动增长i++,i为表中最大数值,也可以指定值
create table t21 (id int(2) primary key auto_increment,name char(10)); //创建表,设置某行自增长
alter table t4 add id int(2) primary key auto_increment; //新增一行自增长
外键(限制如何给字段赋值的)
a表x字段设外键为b表x字段则a表x字段赋值时,值只能在b表的x字段值的范围里选择,且b表x字段某值的更改、删除均会让a表x字段对应值自动同步。
使用规则
表的存储引擎必须是 innodb 字段类型要一致 被参照字段必须要是索引类型的一种 (primary key)
创建外键 foreign key 的命令格式:
create table 表(字段名列表,foreign key(字段名) references 表名(字段名)on update cascade on delete cascade)engine=innodb;
新建表:create table jfb(jfb_id int(2),name char(15), foreign key(name) references bjb(name)on update cascade on delete cascade)engine=innodb;
旧表:alter table bjb add foreign key(bjb_id) references jfb(jfb_id) on update cascade on delete cascade;
查看外键 show create table 表名;
删除外键 alter table 表名 drop foreign key 外键名;
alter table bjb drop foreign key bjb_ibfk_1;
on update 和 on delete 后面可以跟的词语有四个no action , set null , set default ,cascade
no action 表示不做任何操作, set null 表示在外键表中将相应字段设置为null set default 表示设置为默认值
cascade 表示级联操作,就是说,如果主键表中被参考字段更新,外键表中也更新,主键表中的记录被删除,外键表中改行也相应删除