索引与约束
约束
SQL 约束是对表列施加的规则。它们用于防止无效数据被输入到数据库中。
这确保了数据库中数据的准确性和可靠性。
默认值
DEFAULT
子句指定在执行 INSERT
时,如果用户未提供值,则使用的列的默认值。
如果列定义中没有附加显式的 DEFAULT
子句,
则该列的默认值为 NULL
。
显式的 DEFAULT
子句可以指定默认值为 NULL
、
字符串常量、BLOB 常量、带符号数字或任何用括号括起来的常量表达式。
import { sql } from "drizzle-orm" ;
import { integer , uuid , pgTable } from "drizzle-orm/pg-core" ;
const table = pgTable ( 'table' , {
integer1 : integer ( 'integer1' ) .default ( 42 ) ,
integer2 : integer ( 'integer2' ) .default ( sql `'42'::integer` ) ,
uuid1 : uuid ( 'uuid1' ) .defaultRandom () ,
uuid2 : uuid ( 'uuid2' ) .default ( sql `gen_random_uuid()` ) ,
});
CREATE TABLE IF NOT EXISTS "table" (
"integer1" integer DEFAULT 42 ,
"integer2" integer DEFAULT '42' :: integer ,
"uuid1" uuid DEFAULT gen_random_uuid(),
"uuid2" uuid DEFAULT gen_random_uuid()
);
import { sql } from "drizzle-orm" ;
import { int , time , mysqlTable } from "drizzle-orm/mysql-core" ;
const table = mysqlTable ( "table" , {
int : int ( "int" ) .default ( 42 ) ,
time : time ( "time" ) .default ( sql `cast("14:06:10" AS TIME)` ) ,
});
CREATE TABLE ` table ` (
`int` int DEFAULT 42 ,
`time` time DEFAULT cast ( "14:06:10" AS TIME )
);
import { sql } from "drizzle-orm" ;
import { integer , sqliteTable } from "drizzle-orm/sqlite-core" ;
const table = sqliteTable ( 'table' , {
int1 : integer ( 'int1' ) .default ( 42 ) ,
int2 : integer ( 'int2' ) .default ( sql `(abs(42))` )
});
CREATE TABLE ` table ` (
`int1` integer DEFAULT 42
`int2` integer DEFAULT ( abs ( 42 ))
);
import { sql } from "drizzle-orm" ;
import { int , time , singlestoreTable } from "drizzle-orm/singlestore-core" ;
const table = singlestoreTable ( "table" , {
int : int ( "int" ) .default ( 42 ) ,
time : time ( "time" ) .default ( sql `cast("14:06:10" AS TIME)` ) ,
});
CREATE TABLE ` table ` (
`int` int DEFAULT 42 ,
`time` time DEFAULT cast ( "14:06:10" AS TIME )
);
非空
默认情况下,列可以包含 NULL 值。NOT NULL
约束强制列 不 接受 NULL 值。
这强制字段始终包含一个值,这意味着您不能插入新记录,
或在不向该字段添加值的情况下更新记录。
import { integer , pgTable } from "drizzle-orm/pg-core" ;
const table = pgTable ( 'table' , {
integer : integer ( 'integer' ) .notNull () ,
});
CREATE TABLE IF NOT EXISTS "table" (
"integer" integer NOT NULL ,
);
import { int , mysqlTable } from "drizzle-orm/mysql-core" ;
const table = mysqlTable ( 'table' , {
int : int ( 'int' ) .notNull () ,
});
CREATE TABLE ` table ` (
`int` int NOT NULL ,
);
const table = sqliteTable ( 'table' , {
numInt : integer ( 'numInt' ) .notNull ()
});
CREATE TABLE table (
`numInt` integer NOT NULL
);
import { int , singlestoreTable } from "drizzle-orm/singlestore-core" ;
const table = singlestoreTable ( 'table' , {
int : int ( 'int' ) .notNull () ,
});
CREATE TABLE ` table ` (
`int` int NOT NULL ,
);
唯一
UNIQUE
约束确保列中的所有值都是不同的。
UNIQUE
和 PRIMARY KEY
约束都为列或列集提供了唯一性的保证。
PRIMARY KEY
约束自动具有 UNIQUE
约束。
每个表可以有多个 UNIQUE
约束,但每个表只能有一个 PRIMARY KEY
约束。
import { integer , text , unique , pgTable } from "drizzle-orm/pg-core" ;
export const user = pgTable ( 'user' , {
id : integer ( 'id' ) .unique () ,
});
export const table = pgTable ( 'table' , {
id : integer ( 'id' ) .unique ( 'custom_name' ) ,
});
export const composite = pgTable ( 'composite_example' , {
id : integer ( 'id' ) ,
name : text ( 'name' ) ,
} , (t) => [
unique () .on ( t .id , t .name) ,
unique ( 'custom_name' ) .on ( t .id , t .name)
]);
// In Postgres 15.0+ NULLS NOT DISTINCT is available
// This example demonstrates both available usages
export const userNulls = pgTable ( 'user_nulls_example' , {
id : integer ( 'id' ) .unique ( "custom_name" , { nulls : 'not distinct' }) ,
} , (t) => [
unique () .on ( t .id) .nullsNotDistinct ()
]);
CREATE TABLE IF NOT EXISTS "composite_example" (
"id" integer ,
"name" text ,
CONSTRAINT "composite_example_id_name_unique" UNIQUE ( "id" , "name" ),
CONSTRAINT "custom_name" UNIQUE ( "id" , "name" )
);
CREATE TABLE IF NOT EXISTS "table" (
"id" integer ,
CONSTRAINT "custom_name" UNIQUE ( "id" )
);
CREATE TABLE IF NOT EXISTS "user" (
"id" integer ,
CONSTRAINT "user_id_unique" UNIQUE ( "id" )
);
CREATE TABLE IF NOT EXISTS "user_nulls_example" (
"id" integer ,
CONSTRAINT "custom_name" UNIQUE NULLS NOT DISTINCT ( "id" ),
CONSTRAINT "user_nulls_example_id_unique" UNIQUE NULLS NOT DISTINCT ( "id" )
);
import { int , varchar , unique , mysqlTable } from "drizzle-orm/mysql-core" ;
export const user = mysqlTable ( 'user' , {
id : int ( 'id' ) .unique () ,
});
export const table = mysqlTable ( 'table' , {
id : int ( 'id' ) .unique ( 'custom_name' ) ,
});
export const composite = mysqlTable ( 'composite_example' , {
id : int ( 'id' ) ,
name : varchar ( 'name' , { length : 256 }) ,
} , (t) => [
unique () .on ( t .id , t .name) ,
unique ( 'custom_name' ) .on ( t .id , t .name)
]);
CREATE TABLE ` user ` (
`id` int ,
CONSTRAINT `user_id_unique` UNIQUE ( `id` )
);
CREATE TABLE ` table ` (
`id` int ,
CONSTRAINT `custom_name` UNIQUE ( `id` )
);
CREATE TABLE ` composite_example ` (
`id` int ,
`name` varchar ( 256 ),
CONSTRAINT `composite_example_id_name_unique` UNIQUE ( `id` , `name` ),
CONSTRAINT `custom_name` UNIQUE ( `id` , `name` )
);
import { int , text , unique , sqliteTable } from "drizzle-orm/sqlite-core" ;
export const user = sqliteTable ( 'user' , {
id : int ( 'id' ) .unique () ,
});
export const table = sqliteTable ( 'table' , {
id : int ( 'id' ) .unique ( 'custom_name' ) ,
});
export const composite = sqliteTable ( 'composite_example' , {
id : int ( 'id' ) ,
name : text ( 'name' ) ,
} , (t) => [
unique () .on ( t .id , t .name) ,
unique ( 'custom_name' ) .on ( t .id , t .name)
]);
CREATE TABLE ` user ` (
`id` integer
);
CREATE TABLE ` table ` (
`id` integer
);
CREATE TABLE ` composite_example ` (
`id` integer ,
`name` text
);
CREATE UNIQUE INDEX ` composite_example_id_name_unique ` ON `composite_example` ( `id` , `name` );
CREATE UNIQUE INDEX ` custom_name ` ON `composite_example` ( `id` , `name` );
CREATE UNIQUE INDEX ` custom_name ` ON `table` ( `id` );
CREATE UNIQUE INDEX ` user_id_unique ` ON `user` ( `id` );
import { int , varchar , unique , singlestoreTable } from "drizzle-orm/singlestore-core" ;
export const user = singlestoreTable ( 'user' , {
id : int ( 'id' ) .unique () ,
});
export const table = singlestoreTable ( 'table' , {
id : int ( 'id' ) .unique ( 'custom_name' ) ,
});
export const composite = singlestoreTable ( 'composite_example' , {
id : int ( 'id' ) ,
name : varchar ( 'name' , { length : 256 }) ,
} , (t) => [
unique () .on ( t .id , t .name) ,
unique ( 'custom_name' ) .on ( t .id , t .name)
]);
CREATE TABLE ` user ` (
`id` int ,
CONSTRAINT `user_id_unique` UNIQUE ( `id` )
);
CREATE TABLE ` table ` (
`id` int ,
CONSTRAINT `custom_name` UNIQUE ( `id` )
);
CREATE TABLE ` composite_example ` (
`id` int ,
`name` varchar ( 256 ),
CONSTRAINT `composite_example_id_name_unique` UNIQUE ( `id` , `name` ),
CONSTRAINT `custom_name` UNIQUE ( `id` , `name` )
);
检查
CHECK
约束用于限制可以放置在列中的值范围。
如果您在列上定义 CHECK
约束,它将仅允许该列的某些值。
如果您在表上定义 CHECK
约束,它可以根据行中其他列的值限制某些列的值。
import { sql } from "drizzle-orm" ;
import { check , integer , pgTable , text , uuid } from "drizzle-orm/pg-core" ;
export const users = pgTable (
"users" ,
{
id : uuid () .defaultRandom () .primaryKey () ,
username : text () .notNull () ,
age : integer () ,
} ,
(table) => [
check ( "age_check1" , sql ` ${ table .age } > 21` ) ,
]
);
CREATE TABLE IF NOT EXISTS "users" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL ,
"username" text NOT NULL ,
"age" integer ,
CONSTRAINT "age_check1" CHECK ( "users" . "age" > 21 )
);
import { sql } from "drizzle-orm" ;
import { check , int , mysqlTable , text } from "drizzle-orm/mysql-core" ;
export const users = mysqlTable (
"users" ,
{
id : int () .primaryKey () ,
username : text () .notNull () ,
age : int () ,
} ,
(table) => [
check ( "age_check1" , sql ` ${ table .age } > 21` )
]
);
CREATE TABLE ` users ` (
`id` int NOT NULL ,
`username` text NOT NULL ,
`age` int ,
CONSTRAINT `users_id` PRIMARY KEY ( `id` ),
CONSTRAINT `age_check1` CHECK ( `users` . `age` > 21 )
);
import { sql } from "drizzle-orm" ;
import { check , int , sqliteTable , text } from "drizzle-orm/sqlite-core" ;
export const users = sqliteTable (
"users" ,
{
id : int () .primaryKey () ,
username : text () .notNull () ,
age : int () ,
} ,
(table) => [
check ( "age_check1" , sql ` ${ table .age } > 21` )
]
);
CREATE TABLE ` users ` (
`id` integer PRIMARY KEY NOT NULL ,
`username` text NOT NULL ,
`age` integer ,
CONSTRAINT "age_check1" CHECK ( "users" . "age" > 21 )
);
Currently not supported in SingleStore
主键
PRIMARY KEY
约束唯一标识表中的每条记录。
主键必须包含 UNIQUE
值,并且不能包含 NULL
值。
一个表只能有 一个 主键;在该表中,这个主键可以由单个或多个列(字段)组成。
import { serial , text , pgTable } from "drizzle-orm/pg-core" ;
const user = pgTable ( 'user' , {
id : serial ( 'id' ) .primaryKey () ,
});
const table = pgTable ( 'table' , {
id : text ( 'cuid' ) .primaryKey () ,
});
CREATE TABLE IF NOT EXISTS "user" (
"id" serial PRIMARY KEY ,
);
CREATE TABLE IF NOT EXISTS "table" (
"cuid" text PRIMARY KEY ,
);
import { int , text , mysqlTable } from "drizzle-orm/mysql-core" ;
export const user = mysqlTable ( "user" , {
id : int ( "id" ) .autoincrement () .primaryKey () ,
})
export const table = mysqlTable ( "table" , {
cuid : text ( "cuid" ) .primaryKey () ,
})
CREATE TABLE ` user ` (
`id` int AUTO_INCREMENT PRIMARY KEY NOT NULL
);
CREATE TABLE ` table ` (
`cuid` text PRIMARY KEY NOT NULL
);
import { integer , sqliteTable } from "drizzle-orm/sqlite-core" ;
export const user = sqliteTable ( "user" , {
id : integer ( "id" ) .primaryKey () ,
})
export const pet = sqliteTable ( "pet" , {
id : integer ( "id" ) .primaryKey () ,
})
CREATE TABLE ` user ` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL
);
CREATE TABLE ` pet ` (
`id` integer PRIMARY KEY AUTOINCREMENT
)
import { int , text , singlestoreTable } from "drizzle-orm/singlestore-core" ;
export const user = singlestoreTable ( "user" , {
id : int ( "id" ) .autoincrement () .primaryKey () ,
})
export const table = singlestoreTable ( "table" , {
cuid : text ( "cuid" ) .primaryKey () ,
})
CREATE TABLE ` user ` (
`id` int AUTO_INCREMENT PRIMARY KEY NOT NULL
);
CREATE TABLE ` table ` (
`cuid` text PRIMARY KEY NOT NULL
);
复合主键
就像 PRIMARY KEY
,复合主键通过多个字段唯一标识表中的每条记录。
Drizzle ORM 提供了一个独立的 primaryKey
操作符来实现这一点:
import { serial , text , integer , primaryKey , pgTable } from "drizzle-orm/pg-core" ;
export const user = pgTable ( "user" , {
id : serial ( "id" ) .primaryKey () ,
name : text ( "name" ) ,
});
export const book = pgTable ( "book" , {
id : serial ( "id" ) .primaryKey () ,
name : text ( "name" ) ,
});
export const booksToAuthors = pgTable ( "books_to_authors" , {
authorId : integer ( "author_id" ) ,
bookId : integer ( "book_id" ) ,
} , (table) => [
primaryKey ({ columns : [ table .bookId , table .authorId] }) ,
// Or PK with custom name
primaryKey ({ name : 'custom_name' , columns : [ table .bookId , table .authorId] }) ,
]);
...
CREATE TABLE IF NOT EXISTS "books_to_authors" (
"author_id" integer ,
"book_id" integer ,
PRIMARY KEY ( "book_id" , "author_id" ),
);
ALTER TABLE "books_to_authors" ADD CONSTRAINT "custom_name" PRIMARY KEY ( "book_id" , "author_id" );
import { int , text , primaryKey , mysqlTable } from "drizzle-orm/mysql-core" ;
export const user = mysqlTable ( "user" , {
id : int ( "id" ) .autoincrement () .primaryKey () ,
name : text ( "name" ) ,
});
export const book = mysqlTable ( "book" , {
id : int ( "id" ) .autoincrement () .primaryKey () ,
name : text ( "name" ) ,
});
export const booksToAuthors = mysqlTable ( "books_to_authors" , {
authorId : int ( "author_id" ) ,
bookId : int ( "book_id" ) ,
} , (table) => [
primaryKey ({ columns : [ table .bookId , table .authorId] }) ,
// Or PK with custom name
primaryKey ({ name : 'custom_name' , columns : [ table .bookId , table .authorId] })
]);
...
CREATE TABLE ` books_to_authors ` (
`author_id` int ,
`book_id` int ,
PRIMARY KEY ( `book_id` , `author_id` )
);
import { integer , text , primaryKey , sqliteTable} from "drizzle-orm/sqlite-core" ;
export const user = sqliteTable ( "user" , {
id : integer ( "id" ) .primaryKey ({ autoIncrement : true }) ,
name : text ( "name" ) ,
});
export const book = sqliteTable ( "book" , {
id : integer ( "id" ) .primaryKey ({ autoIncrement : true }) ,
name : text ( "name" ) ,
});
export const bookToAuthor = sqliteTable ( "book_to_author" , {
authorId : integer ( "author_id" ) ,
bookId : integer ( "book_id" ) ,
} , (table) => [
primaryKey ({ columns : [ table .bookId , table .authorId] }) ,
// Or PK with custom name
primaryKey ({ name : 'custom_name' , columns : [ table .bookId , table .authorId] })
]);
...
CREATE TABLE ` book_to_author ` (
`author_id` integer ,
`book_id` integer ,
PRIMARY KEY ( `book_id` , `author_id` )
);
import { int , text , primaryKey , mysqlTable } from "drizzle-orm/singlestore-core" ;
export const user = singlestoreTable ( "user" , {
id : int ( "id" ) .autoincrement () .primaryKey () ,
name : text ( "name" ) ,
});
export const book = singlestoreTable ( "book" , {
id : int ( "id" ) .autoincrement () .primaryKey () ,
name : text ( "name" ) ,
});
export const booksToAuthors = singlestoreTable ( "books_to_authors" , {
authorId : int ( "author_id" ) ,
bookId : int ( "book_id" ) ,
} , (table) => [
primaryKey ({ columns : [ table .bookId , table .authorId] }) ,
// Or PK with custom name
primaryKey ({ name : 'custom_name' , columns : [ table .bookId , table .authorId] }) ,
]);
...
CREATE TABLE ` books_to_authors ` (
`author_id` int ,
`book_id` int ,
PRIMARY KEY ( `book_id` , `author_id` )
);
外键
FOREIGN KEY
约束用于防止破坏表之间链接的操作。
FOREIGN KEY
是一个字段(或字段集合),在一个表中引用另一个表的 PRIMARY KEY
。
包含外键的表称为子表,包含主键的表称为引用表或父表。
Drizzle ORM 提供了几种声明外键的方法。
您可以在列声明语句中声明它们:
import { serial , text , integer , pgTable } from "drizzle-orm/pg-core" ;
export const user = pgTable ( "user" , {
id : serial ( "id" ) ,
name : text ( "name" ) ,
});
export const book = pgTable ( "book" , {
id : serial ( "id" ) ,
name : text ( "name" ) ,
authorId : integer ( "author_id" ) .references (() => user .id)
});
import { int , text , mysqlTable } from "drizzle-orm/mysql-core" ;
export const user = mysqlTable ( "user" , {
id : int ( "id" ) .primaryKey () .autoincrement () ,
name : text ( "name" ) ,
});
export const book = mysqlTable ( "book" , {
id : int ( "id" ) .primaryKey () .autoincrement () ,
name : text ( "name" ) ,
authorId : int ( "author_id" ) .references (() => user .id)
});
import { integer , text , sqliteTable } from "drizzle-orm/sqlite-core" ;
export const user = sqliteTable ( "user" , {
id : integer ( "id" ) .primaryKey ({ autoIncrement : true }) ,
name : text ( "name" ) ,
});
export const book = sqliteTable ( "book" , {
id : integer ( "id" ) .primaryKey ({ autoIncrement : true }) ,
name : text ( "name" ) ,
authorId : integer ( "author_id" ) .references (() => user .id)
});
如果您想进行自引用,由于 TypeScript 的限制,您必须显式设置引用回调的返回类型或使用独立的 foreignKey
操作符。
import { serial , text , integer , foreignKey , pgTable , AnyPgColumn } from "drizzle-orm/pg-core" ;
export const user = pgTable ( "user" , {
id : serial ( "id" ) ,
name : text ( "name" ) ,
parentId : integer ( "parent_id" ) .references (() : AnyPgColumn => user .id)
});
// or
export const user = pgTable ( "user" , {
id : serial ( "id" ) ,
name : text ( "name" ) ,
parentId : integer ( "parent_id" ) ,
} , (table) => [
foreignKey ({
columns : [ table .parentId] ,
foreignColumns : [ table .id] ,
name : "custom_fk"
})
]);
import { int , text , foreignKey , AnyMySqlColumn , mysqlTable } from "drizzle-orm/mysql-core" ;
export const user = mysqlTable ( "user" , {
id : int ( "id" ) .primaryKey () .autoincrement () ,
name : text ( "name" ) ,
parentId : int ( "parent_id" ) .references (() : AnyMySqlColumn => user .id) ,
});
// or
export const user = mysqlTable ( "user" , {
id : int ( "id" ) .primaryKey () .autoincrement () ,
name : text ( "name" ) ,
parentId : int ( "parent_id" )
} , (table) => [
foreignKey ({
columns : [ table .parentId] ,
foreignColumns : [ table .id] ,
name : "custom_fk"
})
]);
import { integer , text , foreignKey , sqliteTable , AnySQLiteColumn } from "drizzle-orm/sqlite-core" ;
export const user = sqliteTable ( "user" , {
id : integer ( "id" ) .primaryKey ({ autoIncrement : true }) ,
name : text ( "name" ) ,
parentId : integer ( "parent_id" ) .references (() : AnySQLiteColumn => user .id)
});
//or
export const user = sqliteTable ( "user" , {
id : integer ( "id" ) .primaryKey ({ autoIncrement : true }) ,
name : text ( "name" ) ,
parentId : integer ( "parent_id" ) ,
} , (table) => [
foreignKey ({
columns : [ table .parentId] ,
foreignColumns : [ table .id] ,
name : "custom_fk"
})
]);
要声明多列外键,可以使用专用的 foreignKey
操作符:
import { serial , text , foreignKey , pgTable , AnyPgColumn } from "drizzle-orm/pg-core" ;
export const user = pgTable ( "user" , {
firstName : text ( "firstName" ) ,
lastName : text ( "lastName" ) ,
} , (table) => [
primaryKey ({ columns : [ table .firstName , table .lastName]})
]);
export const profile = pgTable ( "profile" , {
id : serial ( "id" ) .primaryKey () ,
userFirstName : text ( "user_first_name" ) ,
userLastName : text ( "user_last_name" ) ,
} , (table) => [
foreignKey ({
columns : [ table .userFirstName , table .userLastName] ,
foreignColumns : [ user .firstName , user .lastName] ,
name : "custom_fk"
})
])
import { int , text , primaryKey , foreignKey , mysqlTable , AnyMySqlColumn } from "drizzle-orm/mysql-core" ;
export const user = mysqlTable ( "user" , {
firstName : text ( "firstName" ) ,
lastName : text ( "lastName" ) ,
} , (table) => [
primaryKey ({ columns : [ table .firstName , table .lastName]})
]);
export const profile = mysqlTable ( "profile" , {
id : int ( "id" ) .autoincrement () .primaryKey () ,
userFirstName : text ( "user_first_name" ) ,
userLastName : text ( "user_last_name" ) ,
} , (table) => [
foreignKey ({
columns : [ table .userFirstName , table .userLastName] ,
foreignColumns : [ user .firstName , user .lastName] ,
name : "custom_name"
})
]);
import { integer , text , primaryKey , foreignKey , sqliteTable , AnySQLiteColumn } from "drizzle-orm/sqlite-core" ;
export const user = sqliteTable ( "user" , {
firstName : text ( "firstName" ) ,
lastName : text ( "lastName" ) ,
} , (table) => [
primaryKey ({ columns : [ table .firstName , table .lastName]})
]);
export const profile = sqliteTable ( "profile" , {
id : integer ( "id" ) .primaryKey ({ autoIncrement : true }) ,
userFirstName : text ( "user_first_name" ) ,
userLastName : text ( "user_last_name" ) ,
} , (table) => [
foreignKey ({
columns : [ table .userFirstName , table .userLastName] ,
foreignColumns : [ user .firstName , user .lastName] ,
name : "custom_name"
})
]);
索引
Drizzle ORM 提供了 index
和 unique index
声明的 API:
import { serial , text , index , uniqueIndex , pgTable } from "drizzle-orm/pg-core" ;
export const user = pgTable ( "user" , {
id : serial ( "id" ) .primaryKey () ,
name : text ( "name" ) ,
email : text ( "email" ) ,
} , (table) => [
index ( "name_idx" ) .on ( table .name) ,
uniqueIndex ( "email_idx" ) .on ( table .email)
]);
CREATE TABLE " user " (
...
);
CREATE INDEX " name_idx " ON "user" ( "name" );
CREATE UNIQUE INDEX " email_idx " ON "user" ( "email" );
IMPORTANT
对于 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 提供了用于索引创建的所有参数的集合:
// First example, with `.on()`
index ( 'name' )
.on ( table . column1 .asc () , table . column2 .nullsFirst () , ... ) or .onOnly ( table . column1 .desc () .nullsLast () , table .column2 , ... )
.concurrently ()
.where ( sql `` )
.with ({ fillfactor : '70' })
// Second Example, with `.using()`
index ( 'name' )
.using ( 'btree' , table . column1 .asc () , sql `lower( ${ table .column2 } )` , table . column1 .op ( 'text_ops' ))
.where ( sql `` ) // sql expression
.with ({ fillfactor : '70' })
import { int , text , index , uniqueIndex , mysqlTable } from "drizzle-orm/mysql-core" ;
export const user = mysqlTable ( "user" , {
id : int ( "id" ) .primaryKey () .autoincrement () ,
name : text ( "name" ) ,
email : text ( "email" ) ,
} , (table) => [
index ( "name_idx" ) .on ( table .name) ,
uniqueIndex ( "email_idx" ) .on ( table .email) ,
]);
CREATE TABLE ` user ` (
...
);
CREATE INDEX ` name_idx ` ON `user` ( `name` );
CREATE UNIQUE INDEX ` email_idx ` ON `user` ( `email` );
IMPORTANT
截至目前,drizzle-kit
仅支持索引 name
和 on()
参数。
Drizzle ORM 提供了用于索引创建的所有参数集合:
// Index declaration reference
index ( "name" )
.on ( table .name)
.algorythm ( "default" ) // "default" | "copy" | "inplace"
.using ( "btree" ) // "btree" | "hash"
.lock ( "default" ) // "none" | "default" | "exclusive" | "shared"
import { integer , text , index , uniqueIndex , sqliteTable } from "drizzle-orm/sqlite-core" ;
export const user = sqliteTable ( "user" , {
id : integer ( "id" ) .primaryKey ({ autoIncrement : true }) ,
name : text ( "name" ) ,
email : text ( "email" ) ,
} , (table) => [
index ( "name_idx" ) .on ( table .name) ,
uniqueIndex ( "email_idx" ) .on ( table .email) ,
]);
CREATE TABLE ` user ` (
...
);
CREATE INDEX ` name_idx ` ON `user` ( `name` );
CREATE UNIQUE INDEX ` email_idx ` ON `user` ( `email` );
Drizzle ORM 提供了用于索引创建的所有参数集合:
// Index declaration reference
index ( "name" )
.on ( table .name)
.where ( sql `...` )
import { int , text , index , uniqueIndex , singlestoreTable } from "drizzle-orm/singlestore-core" ;
export const user = singlestoreTable ( "user" , {
id : int ( "id" ) .primaryKey () .autoincrement () ,
name : text ( "name" ) ,
email : text ( "email" ) ,
} , (table) => [
index ( "name_idx" ) .on ( table .name) ,
uniqueIndex ( "email_idx" ) .on ( table .email) ,
]);
CREATE TABLE ` user ` (
...
);
CREATE INDEX ` name_idx ` ON `user` ( `name` );
CREATE UNIQUE INDEX ` email_idx ` ON `user` ( `email` );