外键约束
什么是外键?
- 定义: 关系声明一个属性 (组) 为外键, 用它引用另一个关系的属性 (组);
- 被引用方要求: 该属性 (组) 必须是
UNIQUE或PRIMARY KEY; - 引用完整性: 外键中的每个值都必须在被引用关系中出现;
怎样声明外键?
- 属性后声明:
CREATE TABLE Studio(
name CHAR(30) PRIMARY KEY,
address VARCHAR(255),
presC INT REFERENCES MovieExec(cert)
);
- 单独声明:
CREATE TABLE Studio(
name CHAR(30) PRIMARY KEY,
address VARCHAR(255),
presC INT,
FOREIGN KEY (presC) REFERENCES MovieExec(cert)
);
被引用属性发生变化时外键怎样处理?
| 策略 | 行为 |
|---|---|
| 拒绝违法更新 (默认) | 破坏引用完整性的更新直接不执行 |
级联原则 CASCADE | 被引用属性的改变同步作用到对应外键上 |
置空值原则 SET NULL | 被引用属性改变时, 把受影响的外键值置为 NULL |
CREATE TABLE Studio(
name CHAR(30) PRIMARY KEY,
address VARCHAR(255),
presC INT REFERENCES MovieExec(cert)
ON DELETE SET NULL
ON UPDATE CASCADE
);
(source: 060-约束和触发器.md §键和外键)