主键:保证数据的唯一性,非空且唯一,一般设置主键的语法为:字段 类型 PRIMARY KEY;或者 字段 类型,PRIMARY KEY(字段名)
外键:保证数据的完整性,一致性。一般设置的外键关联的是另一张表的主键。外键的插入或者更新不能插入或更新主键表中没有的值,切记删除主键表中的数据时,
要先去外键表中接触关系,也可以在建立外键时设置好更新或者删除的外键表中的数据是否更改。设置外键的语法:CONSTRAINT 外键名 FOREIGN KEY (外键字段)REFERENCES 参照表 (参照字段) ON DELETE SET NULL ON UPDATE CASCADE 设置参照完整性。
外键约束的参照操作:
RESTRICT拒绝参照表删除或更新参照字段;
RESTRICT和NO ACTION相同,但这个指令只在mysql生效;
CASCADE删除或更新参照表的参照字段时,外键表的记录同步删除更新;
SET NULL 删除或更新参照表的参照字段时,外键表的外键设为NULL。
在这里说一句,外键一定要加索引,
(1) 外键没有索引,确实可能导致子表产生表锁,但是有前提:
a. 子表有删改操作。
b. 主表有删操作,或者更新主键的操作。
满足以上两个条件才会出现主表操作hang状态。
(2) 外键不建索引,则删除主表记录或主子表关联查询,都会进行子表的全表扫描。
这里顺带说一下索引查询的原理:
“索引”是为了能够更快地查询数据。比如一本书的目录,就是这本书的内容的索引,读者可以通过在目录中快速查找自己想要的内容,然后根据页码去找到具体的章节。
数据库也是一样,如果查询语句使用到了索引,会先去索引里面查询,取得数据所在行的物理地址,进而访问数据。