1.主键外键
2.主键详情
3.思考对比
主表:对于两个表的桥梁的关键字 就是一个“公共关键字”,公共关键字设为主键的表为“父表”(主表) 一般为小表 内容少的
从表:另一个是外键就是为“从表”,故该公共关键字为从表的“外键”;
主键:唯一的; 一个表中的一条字段的唯一标识 小表中的一个字段 可以这样说 小表(主表)的唯一主键
外键:从表 大表中的一个字段 可以这样说 大表(从表)中的一个外键
主键外键的链接是在
总结:连接关键字 是主键的为主表 反之为外键为从表
4.符号表示
1,三叉的,表示多个;
2,一叉的,表示一个;
3,圆圈的,表示零个;
5.表的关系
1,一对一:一个A表,只能对应一个B表字段;
2,一对多:一个A表字段,可以对应多个B表字段;
3,多对多:一个A表字段,可以对应多个B表字段;一个B表字段,也可以对应多个A表字段。
6.优劣
性能问题
1.数据库需要维护外键的内部管理;
2.外键等于把数据的一致性事务实现,全部交给数据库服务器完成;
3.有了外键,当做一些涉及外键字段的增,删,更新操作之后,需要触发相关操作去检查,而不得不消耗资源;
4.外键还会因为需要请求对其他表内部加锁而容易出现死锁情况;
选择适用
服务器不是问题 并发量大 系统要求高的时候少用外键
并发量小 的时候可以选择外键
7.索引
聚集索引以及非聚集索引 用的是B+树索引 就是利用B+树将所有的数据(或数据快捷方式)进行连接了起来 而不是松散的存放
实体数据的对应的是聚簇索引
快捷方式的对应的是非聚簇索引
聚集索引和非聚集索引的区别?
聚集索引一定是唯一索引。但唯一索引不一定是聚集索引。
聚集索引,在索引页里直接存放数据(相当于值传递),而非聚集索引在索引页里存放的是索引(地址相当于引用传值),
这些索引指向专门的数据页的数据。
8.外键约束
cascade方式(主表变动)
在父表上update/delete记录时,同步update/delete掉子表的匹配记录 主表字段
实用:感觉这个属性适用于更新 删除的话 代价太大了
set null方式(主表变动)
在父表上update/delete记录时,将子表上匹配记录的列设为null
要注意子表的外键列不能为not null
主表字段、更新删除时候 子表进行设为空
这个适用于删除 更新的话 应该不能用很少用 !
No action方式(子表变动)
如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
适用于主表字段不应该发生变化 子表的改动删除不会影响到主表的情况
Restrict方式(子表变动)
同no action, 都是立即检查外键约束
9.外键SQL
添加外键:
alter table 表名 add constraint 外键约束名 foreign key(列名) references 引用外键表(列名)
alter table clothsize add constraint clothId foreign key (clothId) references cloth(Id)
删除外键:
alter table 表名 drop constraint 外键约束名
alter table clothsize drop constraint clothId
注意点:
* 两个表必须是InnoDB表类型。
* 使用在外键关系的域(字段)必须为索引型(Index)。所以要为设置外键的字段建立index。
* 使用在外键关系的两个域(字段)数据类型要相同。