属性与元组约束
NOT NULL 约束什么?
- 要求: 不允许该属性的元组取值出现 NULL;
- 写法: 在属性声明后加
NOT NULL; - 时机: 插入或修改元组时检查;
CREATE TABLE Studio(
name CHAR(30) PRIMARY KEY,
address VARCHAR(255),
presC INT REFERENCES MovieExec(cert) NOT NULL
);
基于属性的 CHECK 约束怎样工作?
- 写法:
CHECK写在属性声明之后; - 时机: 修改元组时检查, 违反约束的修改被禁止;
- 作用域: 条件只针对该属性;
CREATE TABLE Studio(
name CHAR(30) PRIMARY KEY,
address VARCHAR(255),
presC INT REFERENCES MovieExec(cert) CHECK (presC >= 100000)
);
基于元组的 CHECK 约束与属性级有什么区别?
- 写法:
CHECK作为关系定义的一部分列出, 不属于某个属性; - 作用域: 条件可以同时引用同一个元组的多个属性;
- 时机: 同样在修改元组时检查, 违法则禁止修改;
CREATE TABLE Studio(
name CHAR(30) PRIMARY KEY,
address VARCHAR(255),
presC INT REFERENCES MovieExec(cert),
CHECK (presC >= 100000)
);
(source: 060-约束和触发器.md §属性和元组的约束)