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

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

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

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

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

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

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

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

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

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

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

drop table if exists tbl_name;

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

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

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

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

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

这就需要表的级联操作。

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

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

对于删除外键:

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

show create table tbl_name\G;

删除外键:

alter table tbl_name drop foreign key 外键名;

增加级联动作:

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;