索引和约束
约束
SQL 约束是对表列施加的规则。它们用于防止无效数据进入数据库。
这可以确保数据库中的数据的准确性和可靠性。
默认值
DEFAULT
子句指定如果用户在进行 INSERT
操作时未提供值,则在列上使用的默认值。如果列定义不附加显式的 DEFAULT
子句,则列的默认值为 NULL
。
显式的 DEFAULT
子句可以指定默认值为 NULL
,字符串常量,Blob 常量,有符号数或用括号括起来的任何常量表达式。
非空
默认情况下,列可以存储 NULL 值。NOT NULL
约束强制列 不 接受 NULL 值。
这将确保字段始终包含一个值,这意味着您无法插入新记录或更新记录而不给此字段添加值。
唯一性
UNIQUE
约束确保列中的所有值都是不同的。
UNIQUE
约束和 PRIMARY KEY
约束都为列或一组列提供了唯一性保证。
PRIMARY KEY
约束自动具有 UNIQUE
约束。
ℹ️
每个表可以有多个 UNIQUE
约束,但每个表只能有一个 PRIMARY KEY
约束。
检查条件
CHECK
约束用于限制可放置在列中的值范围。
如果在列上定义了 CHECK
约束,它将仅允许为此列指定的某些值。
如果在表上定义了 CHECK
约束,它可以根据行中其他列的值来限制特定列中的值。
主键
PRIMARY KEY
约束唯一标识表中的每条记录。
主键必须包含 UNIQUE
值,并且不能包含 NULL
值。
一个表只能有 一个 主键;并且在该表中,此主键可以由单个字段或多个字段组成。
复合主键
与 PRIMARY KEY
类似,复合主键使用多个字段在表中唯一标识每条记录。
Drizzle ORM 提供了一个独立的 primaryKey
运算符来实现这一点:
外键
FOREIGN KEY
约束用于防止破坏表之间链接的操作。
FOREIGN KEY
是一个字段(或一组字段),它引用另一个表中的 PRIMARY KEY
。
具有外键的表称为子表,具有主键的表称为引用表或父表。
Drizzle ORM 提供了几种声明外键的方法。
您可以在列声明语句中声明它们:
如果您想进行自引用,由于 TypeScript 的限制,您必须显式设置引用回调的返回类型或使用一个独立的 foreignKey
运算符。
要声明多列外键,可以使用专用的 foreignKey
运算符:
索引
Drizzle ORM 提供了对索引和唯一索引的 API 声明:
⚠️
对于 drizzle-kit@0.22.0
和 drizzle-orm@0.31.0
drizzle-kit
之前的版本仅支持索引 name
和 on()
参数。
在 drizzle-kit@0.22.0
和 drizzle-orm@0.31.0
版本之后,drizzle-kit 中支持所有字段!
从 0.31.0 开始,Drizzle ORM 的新索引 API 提供了用于创建索引的所有参数集:
⚠️
目前的 drizzle-kit
只支持索引的 name
和 on()
参数。
Drizzle ORM 提供了用于索引创建的所有参数:
Drizzle ORM 提供了用于索引创建的所有参数: