数据库外键

2018-09-06  本文已影响0人  杜大个

前面我们所学习到的知识都是针对一张表的操作,也就是作为的单表操作 ,实际业务中需要对两张以上的表进行操作,即多表操作,其中设计到表关联 的约束->外键
什么是外键

外键是指引用另一个表中的一列或者多列,被引用的列应该具有主键约束或者唯一性约束。 外键用于建立和加强两个表数据之间的连接.

举例: 创建一个学生表(student)和一个班级表(grade) CREATE TABLE grade( cls_id int NOT NULL PRIMARY KEY, name varchar(32) );

CREATE TABLE student( stu_id int NOT NULL PRIMARY KEY, stu_name varchar(32), cls_id int NOT NULL, )

思考?上面的两张表具有外键关系了?
为表添加外键

ALTER TABLE 表名 ADD CONSTRAINT FK_ID(外键约束名称) foreign key(外键字段名) REFERENCES 主表(主键字段名)

也可以直接在创建变的时候添加外键 CREATE TABLE student( stu_id int NOT NULL PRIMARY KEY, stu_name varchar(32), cls_id int NOT NULL, CONSTRAINT FK_ID foreign key(外键字段名) REFERENCES 外表表名(主键名) )

注意: 添加外键需要注意:

建立外键的表必须是InnoDB型,不能是临时表,因为在MYSQL中,只有Innodb类型才支持外键
定义外键名时,不能加引号,如constraint 'FK_ID' 或则 constraint “FK_ID”,这样都是错误的

添加外键约束说明 我们建立外键是为了保证数据的完整性和一致性,如果主键中的数据被删除或者修改,从表中对应的数据怎么处理? 正确的做法当然是从表中的数据也随之改变,否则数据库中会存在很多无意义的数据,当然mysql帮我们想到了 这些,我们在建立外键时添加 ON DELETE 或则 ON UPDATE字句来告诉数据库,避免垃圾数据的产生 CREATE TABLE student( stu_id int NOT NULL PRIMARY KEY, stu_name varchar(32), cls_id int NOT NULL, CONSTRAINT FK_ID foreign key(外键字段名) REFERENCES 外表表名(主键名) ON DELETE CASCADE )
name desc
CASCADE 删除包含与已删除键值有参照过膝的所有记录
SET NULL 修改包含与已删除键值有参照关系的所有记录,使用NULL来替换(注意:不能替换用于已添加约束为NOT NULL的字段)
NO ACTION 不进行任何的操作
RESTRICT (默认值,也是最安全的设置)拒绝主表删除或者修改外键关联列
删除外键

ALTER TABLE 表名 drop foreign key 外键名称

添加数据: 我们创建了两张表,拥有主键的表我们称之为主表,拥有外键的表我们称之为从表,我们在往表中添加数据时, 先添加主表中的内容,在添加从表中的内容,删除数据时,先删除从表中的数据,在删除主表中的数据,否则会报错

约束: 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。

主键primary key:主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。

非空not null:此字段不允许填写空值

惟一unique:此字段的值不允许重复,唯一存在

默认default:默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值

外键foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常
表的关联关系

E-R模型

E表示entry,实体,设计实体就像定义一个类一样,指定从哪些方面描述对象,一个实体转换为数据库中的一个表

R表示relationship,关系,关系描述两个实体之间的对应规则,关系的类型包括包括一对一、一对多、多对多

关系也是一种数据,需要通过一个字段存储在表中

实体A对实体B为1对1,则在表A或表B中创建一个字段,存储另一个表的主键值

实体A对实体B为1对多:在表B中创建一个字段,存储表A的主键值

实体A对实体B为多对多:新建一张表C,这个表只有两个字段,一个用于存储A的主键值,一个用于存储B的主键值

上一篇 下一篇

猜你喜欢

热点阅读