主键:主键是一张表的唯一标识符,应该让其处于不可被外界更改状态。
且主键对于用户来说是无意义的,为了明确这一点,我们应该让主键处于一种幽魂状态,即主键存在,但其他人并不感觉到它存在。
外键:创建外键是为了在数据表之间建立联系。一个外键一般而言在他自身的主表中是唯一的,我这里经常就使用主表的主键作为从表的外键。
何谓主表,从表?
user表中有字段
id int 11 not null 主键
name varchar 20 not null 普通字段
message表中有字段
id int 11 not null 主键
content varchar 20 not null 普通字段
userId int 11 null 外键
上方有两张表,其中user表就是主表,而message表即是从表。
添加外键的时候应该注意如下规则:
1、添加外键的数据库引擎必须为InnoDB
2、关联的字段数据类型必须一样,如上方两张表中的关联都是int类型
3、知道表与表之间的主从关系,需要在从表中添加外键
4、从表中的关联字段数据,在主表中需要是唯一的,我这里一般就使用主表的主键
5、创建外键的时候,需要先建立索引。索引的目的是为了更快地进行搜寻。当然,如果没有在主表里面建立索引,那么可能在从表中创建外键的时候出现错误。
6、如果有多张表需要创建外键,那么外键的名字也必须是唯一的,且不区分大小写。
使用navicat for mysql创建外键时,需要选择删除更新的关系:
.cascade方式
在父表上update/delete记录时,同步update/delete掉子表的匹配记录
. set null方式
在父表上update/delete记录时,将子表上匹配记录的列设为null
要注意子表的外键列不能为not null
. No action方式
如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
. Restrict方式
同no action, 都是立即检查外键约束