跳到主要内容

属性与元组约束

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 §属性和元组的约束)