您的位置:首页 > 数据库 > MySQL

mysql学习六之实体类型的一对一,多对多,一对多关系详解,定义外键后记录的增加删除操作,以及级联删除操作

2019-01-18 16:59 1176 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33322074/article/details/86539372

一、实体与实体之间的一对一关系

字段比较多时可以通过垂直分隔的方法形成两个表,即形成1:1的关系。

二、实体之间一对多的关系

注意:是在多的一端增加一个字段用于指向所属的另外实体情况。

三、多对多的关系

多对多的实现关系需要在中间建立一个对应关系表。这个对应关系表至少包含两个原先表的各自主键。

对于多对多关系还有一个问题。

其实多对多的关系是将多对多转换成两个一对多,那么在visio设计数据库时如何画箭头指向呢?

其实这个问题可以这样思考,

1、多的指向一,加入学生和班级关系,是多对一,如果班级指向学生那么班级表就要为每个学生建立一个字段,大大浪费了空间。

2、要分清那个是多,那个是一。上图所示:一个讲师可以有多个关系,一个关系只能有一个讲师。因此讲师表是一,关系表是多。因此关系表指向讲师。

四、外键 foreign key

1、定义外键

注意:外键的作用很重要。

2、外键的sql语句

注意:此处有个comment列属性,意思是注释,相当于在列的旁边有个注释。

其实在创建表时还应该写一句:如果表存在就删除此表。然后再创建。

[code]drop table if exists tbl_name;

  外键的书写:先增加一个外键字段,用foreign key 指定该字段,reference 关联 表的字段。

3、定义外键后,如果想增加记录,首先看父表记录中有没有外键的记录。

问题2:那么还有一个问题,在一对多中,外键加在一中,还是多中?

            很明显,外键一般存在多的表中,因为如果在一中,恐怕需要加无数个外键。

五、含有外键的删除操作

由于定义了外键,各表之间产生了关联,随意增加删除,都牵动着各表,删除操作更是复杂。

这就需要表的级联操作。

级联操作包含主表更新和主表删除。步骤:

1、首先你所创建的表要设置成运行级联操作。

修改外键设置:方法是,先删除外键,再添加外键。通过修改表完成

对于删除外键:

首先要知道外键名:通过语句查看

[code]show create table tbl_name\G;

删除外键:

[code]alter table tbl_name drop foreign key 外键名;

增加级联动作:

[code]alter table tbl_name add foreign key (本表外键字段) references tbl2_name (外键字段) on delete set null;

on delete set null;删除主表时,将从表的外键设置为null.

上图可见在删除主表的记录时,从表外键被设置为null了。

on delete cascade;是级联删除,即:如果删除了主表记录内容,那么从表记录也被删除。

on update restrict; 表示更新时严禁操作。其中restrict 是默认值。

  这是个默认值,不写也有。而我们的目标是在更新主表主键时,从表的外键值也跟着更改。

只能用 on update cascade;

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐