数据库表的外键

来源:互联网 发布:99宿舍客服软件 编辑:程序博客网 时间:2024/06/05 10:22

一.什么是外键

某张表中的列在另外一张表中存储,而且是另一张表的主键列,就可以说该列为外键列,外键列可以有一列或多列,但是只有有主键约束或唯一约束的列才能被其他表引用为外键,并且外键只能引用外键表中对应列的值或空值。

二.外键的作用

避免出现垃圾数据(冗余),保持数据完整性、一致性,提高操作安全性。

三.添加外键约束

主表:被引用的表,外键表。
从表:引用外键的表(存在外键的表)。
语法:
alter table 从表名
add constraint 自定义外键名 foreign key(从表外键列的列名)
references 外键表名(外键表主键列的列名)
[on update SET NULL|NO ACTION|CASCADE|RESTRICT];
例如:
alter table users
add constraint FK_id foreign key(oid)
references offices(id);
在从表中设置外键约束(从表中设置外键)。
自定义外键名:也叫自定义外键约束名,不能使用''(单引号)包含,一般为FK_外键表主键列名。
外键主要是在对标进行删除和更新表时发挥作用:
RESTRICT:默认值,不能删除主表(外键表)或修改外键关联列,除非从表中不存在关联数据,安全性最高。
CASCADE:删除包含已删除键值有关联性的所有记录,删除主表时自动删除从表相关数据,删除从表时主表不变。
NO ACTION:从表没有关联数据,主表才可以删除。

SET NULL:删除主表时自动更新从表对应值为NULL。

注意:RESTRICT与NO ACTION的区别:前一个安全性更高,但是操作都是一样的。

例如:

DROP TABLE IF EXISTS users;

CREATE TABLE users-- 创建从表

(

id INT PRIMARY KEY,-- 主键

uname VARCHAR(10) NOT NULL,

oid INT NOT NULL-- 外键

);

DROP TABLE IF EXISTS offices;

CREATE TABLE offices-- 创建主表

(

id INT PRIMARY KEY,

oname VARCHAR(20) NOT NULL-- 部门名称

);

-- 添加外键约束

ALTER TABLE users

ADD CONSTRAINT FK_id FOREIGN KEY(oid)

REFERENCES offices(id);-- 这里on update默认为RESTRICT

-- 插入数据

INSERT INTO offices VALUES(2,'业务部');--必须先执行这条语句

INSERT INTO users VALUES(2,'李四',2);

四.删除外键约束

语法:

alter table 从表名

drop foreign key 外键名;

外键名:自定义的外键约束名。

例如:

alter table offices

drop foreign key FK_id;



0 0