数据库约束的分类和实现

为什么要用约束

数据库的约束(constrain)用于设计数据表和列,它就像是规范,保证数据的格式,和范围,以及数据表之间的联系。

以sqlite 为例:

column constraint:(列约束)

  1. check constraint:
t.column(email, check: email.like("%@%”))
reference constraint:
t.column(user_id, references: users, id)
  1. collate constraint:
t.column(name, collate: .rtrim)
t.column(email, collate: .nocase)

table constraint:(表约束)

  1. UNIQUE constraint:The UNIQUE constraint ensures that all values in a column are different.

CONSTRAINT UC_Person UNIQUE (ID,LastName) —ID和LastName列都是独一无二的

  1. PRIMARY KEY constraint:主键约束 ---用来标识一列,可以用多个字段表示

  2. CHECK constraint:t.check(balance >=0)

the form of a boolean expression(expression)Boolean expressions can be easily built using filter operators and functions.
//CHECK ("balance" >= 0.0)

用filter function 来实现:传入一个返回bool数据类型的方法。

  1. FOREIGN KEY constraint: 外键约束 表示表与表之间的关系,与列约束的reference constraint 不同,外键需要有表与表之间交互的功能

修改父键时,子键的动作:

  1. NO ACTION:不做任何修改
  2. RESTRICT:当父键存在有与之映射的子键时,不能删除(for ON DELETE RESTRICT) or 修改 (for ON UPDATE RESTRICT)
  3. SET NULL:当父键删除时 (for ON DELETE SET NULL)映射的子键设为NULL 或者修改时(for ON UPDATE SET NULL)
  4. SET DEFAULT:与 SET NULL相似,除非子键的列有设默认值
  5. CASCADE:当父键的列删除,所有关联的列也被删除,当父键被修改时所有子键的外键也被修改

你可能感兴趣的:(数据库约束的分类和实现)