一、主键 索引 关系
1. 主键:主键的唯一作用就是唯一标识表中的某一行资料。分为单一主键和联合主键:
单一主键:只用一列就能唯一标识一行。
联合主键:当使用一列已经不能唯一标示一行的时候,就要采用多列唯一标识一行,就是联合主键。联合主健多个栏位不能同时相同
2. 索引:索引的作用就是提高资料的检索速度,分为单一索引和联合索引:
单一索引:只是用某一列资料作为索引,预设是 index 索引,这一列可以包含重复资料;如果某一列不存在重复资料最好设定成 unique 形式的索引,比 index 的索引速度更快,在 text 资料上要使用 fulltext 索引。
联合索引:为了更进一步提高检索速度,每次检索都需要用多列同时进行时,就可以把这多列设为联合索引,提高索引速度,根据多列是否唯一,也分为 index 索引和 unique 索引。
联合索引的使用必须注意:不能垮栏位使用,比如 a b c 联合索引 只有 a|ab|abc 才能用上联合索引栏位。
3. 主键一定是索引,但是索引不一定是主键。一个表只能有一个主键或联合主键,但是可以有多个索引。
主键栏位必须不能为空,但是索引栏位可以为空。
二、外来键和主健的关系
1. 外来键就是让表中栏位的值在参照表中的栏位中选择的一种约束标示
2. 建立外来键的条件
被参照栏位必须是主键
参照栏位和被参照栏位必须是相同的资料型别
表的储存引擎必须是 innodb
三、语法格式
1. 建立主键的命令格式
1.1. 在建立表时建立主健
create table 表名 (栏位列表,primary key(需要设定成主健的栏位名) auto_increment); #auto_increment 是需要将主健栏位设定成自动增长的关键字,如果主健不是整数型别或者不需要自动增长的时候不需要该关键字; 当需要设定联合主键时,多个需要设定成主健的栏位名之间用逗号隔开,而且不能使用自动增长`
或者
create table 表名 (主健栏位 栏位型别 primary key auto_increment, 栏位列表);#此方法在建立联合主健时不可用
1.2. 在已经建立好的表上建立主健(如果该表中已经存在资料,且资料违反了主键约束,则无法建立主健,需要解决资料冲突后再建立)
alter table 表名 add primary key(需要设定成主健的栏位名) auto_increment;
2. 建立外来键的命令格式
2.1. 在建立表时建立外来键 (满足建立外来键的条件下)
create table 表名 (栏位列表,foreign key(需要建立外来键约束的栏位) references 被参照表的表名 (被参照表的被参照栏位) on update cascade on delete cascade)engine=innodb;
如果外来键需要具有唯一标示的时候还可以在外来键上加上主健约束
2.2. 在已经存在的表中建立外来键
alter table 表名 add foreign key(栏位名) references 参考表名 (参考栏位名) on update casecade on delete cascade) engine=innodb;
3. 建立索引的命令格式
3.1. 建立表的时候建立索引 (索引可以有多个,在以下示例中新增的是两个)
create table 表名 (栏位列表,index(已经存在栏位名),index(已经存在的栏位名));#如果是联合索引的多个已经存在栏位名用,隔开,记住不能跨栏位设定联合索引
预设的索引名和栏位名相同
3.2. 把已经存在的表中的栏位设定为索引栏位
create index 索引名称 on 表名 (栏位名)
索引名可以自己命名 一般使用栏位名作为索引名
4. 建立唯一索引的命令格式和普通索引的格式相似只需要保证栏位记录的唯一性就可以使用 unique 关键字