Mysql主键外键索引------外键还需要探讨!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fujian9544/article/details/86672074

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。
    * 使用在外键关系的两个域(字段)数据类型要相同。

猜你喜欢

转载自blog.csdn.net/fujian9544/article/details/86672074