本文档这一部分中的所有示例都不使用数据库列名别名,列名是根据 TypeScript 键生成的。
如果你愿意,可以在列名中使用数据库别名,也可以使用 casing API 为 Drizzle 定义映射策略。
你可以在 这里 阅读更多相关内容
npm i drizzle-orm@rc
npm i drizzle-kit@rc -D
我们为它们全部提供了原生支持,不过如果这还不够用,你也可以随时创建 自定义类型。
本文档这一部分中的所有示例都不使用数据库列名别名,列名是根据 TypeScript 键生成的。
如果你愿意,可以在列名中使用数据库别名,也可以使用 casing API 为 Drizzle 定义映射策略。
你可以在 这里 阅读更多相关内容
有符号 4 字节整数
import { int, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
int: int()
});
CREATE TABLE [table] (
[int] int
);import { int, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
int1: int().default(10),
});
CREATE TABLE [table] (
[int1] int CONSTRAINT [table_int1_default] DEFAULT ((10))
);smallint
小范围有符号 2 字节整数
import { smallint, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
smallint: smallint()
});CREATE TABLE [table] (
[smallint] smallint
);import { smallint, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
smallint1: smallint().default(10),
});CREATE TABLE [table] (
[smallint1] smallint CONSTRAINT [table_smallint1_default] DEFAULT ((10))
);tinyint
小范围有符号 1 字节整数
import { tinyint, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
tinyint: tinyint()
});CREATE TABLE [table] (
[tinyint] tinyint
);import { tinyint, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
tinyint1: tinyint().default(10),
});CREATE TABLE [table] (
[tinyint1] tinyint CONSTRAINT [table_tinyint1_default] DEFAULT ((10))
);bigint
有符号 8 字节整数
如果你预期的值介于 2^31 和 2^53 之间,可以使用 mode: 'number',并处理 JavaScript 的 number 而不是 bigint。
import { bigint, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
bigint: bigint({ mode: 'number' })
});
// 将推断为 `number`
bigint: bigint({ mode: 'number' })
// 将推断为 `bigint`
bigint: bigint({ mode: 'bigint' })
// 将推断为 `string`
bigint: bigint({ mode: 'string' })CREATE TABLE [table] (
[bigint] bigint
);import { bigint, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
bigint1: bigint({ mode: 'number' }).default(10)
});CREATE TABLE [table] (
[bigint1] bigint CONSTRAINT [table_bigint1_default] DEFAULT ((10))
);一种 int 数据类型,可以取值为 1、0 或 NULL
Drizzle 也接受 true 或 false 作为值,而不是 1 和 0
import { bit, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
bit: bit()
});
CREATE TABLE [table] (
[bit] bit
);text
服务器代码页中的可变长度非 Unicode 数据,最大字符串长度为
2^31 - 1(2,147,483,647)
更多信息请参阅官方 MSSQL 文档。
你可以定义 { enum: ["value1", "value2"] } 配置来推断 insert 和 select 类型,它不会检查运行时值。
import { text, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
text: text()
});
// will be inferred as text: "value1" | "value2" | null
text: text({ enum: ["value1", "value2"] })CREATE TABLE [table] (
[text] text
);ntext
最大字符串长度为 2^30 - 1(1,073,741,823)的可变长度 Unicode 数据。
更多信息请参阅官方 MSSQL 文档。
你可以定义 { enum: ["value1", "value2"] } 配置来推断 insert 和 select 类型,它不会检查运行时值。
import { ntext, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
ntext: ntext()
});
// will be inferred as text: "value1" | "value2" | null
ntext: ntext({ enum: ["value1", "value2"] })CREATE TABLE [table] (
[ntext] ntext
);varchar(n|max)
可变大小字符串数据。使用 n 定义字符串大小(以字节为单位),其值可以从 1 到 8,000
更多信息请参阅官方 MSSQL 文档。
你可以定义 { enum: ["value1", "value2"] } 配置来推断 insert 和 select 类型,它不会检查运行时值。
根据 MSSQL 文档,length 参数是可选的。
import { varchar, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
varchar1: varchar(),
varchar2: varchar({ length: 256 }),
varchar3: varchar({ length: 'max' })
});
// will be inferred as text: "value1" | "value2" | null
varchar: varchar({ enum: ["value1", "value2"] });CREATE TABLE [table] (
[varchar1] varchar,
[varchar2] varchar(256),
[varchar3] varchar(max)
);nvarchar(n|max)
可变大小字符串数据。n 的值定义了以字节对为单位的字符串大小
更多信息请参阅官方 MSSQL 文档。
你可以定义 { enum: ["value1", "value2"] } 配置来推断 insert 和 select 类型,它不会检查运行时值。
根据 MSSQL 文档,length 参数是可选的。
import { nvarchar, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
nvarchar1: nvarchar(),
nvarchar2: nvarchar({ length: 256 }),
});
// will be inferred as text: "value1" | "value2" | null
nvarchar: nvarchar({ enum: ["value1", "value2"] });
// will be inferred as `json`
nvarchar: nvarchar({ mode: 'json' })CREATE TABLE [table] (
[nvarchar1] nvarchar,
[nvarchar2] nvarchar(256)
);char(n)
固定大小字符串数据。n 定义字符串大小(以字节为单位),且必须是 1 到 8,000 之间的值
更多信息请参阅官方 MSSQL 文档。
你可以定义 { enum: ["value1", "value2"] } 配置来推断 insert 和 select 类型,它不会检查运行时值。
根据 MSSQL 文档,length 参数是可选的。
import { char, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
char1: char(),
char2: char({ length: 256 }),
});
// will be inferred as text: "value1" | "value2" | null
char: char({ enum: ["value1", "value2"] });CREATE TABLE [table] (
[char1] char(1),
[char2] char(256)
);nchar(n)
固定大小字符串数据。n 定义字符串大小(以字节对为单位),且必须是 1 到 4,000 之间的值
更多信息请参阅官方 MSSQL 文档。
你可以定义 { enum: ["value1", "value2"] } 配置来推断 insert 和 select 类型,它不会检查运行时值。
根据 MSSQL 文档,length 参数是可选的。
import { nchar, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
nchar1: nchar(),
nchar2: nchar({ length: 256 }),
});
// will be inferred as text: "value1" | "value2" | null
nchar: nchar({ enum: ["value1", "value2"] });CREATE TABLE [table] (
[nchar1] nchar(1),
[nchar2] nchar(256)
);长度为 n 字节的固定长度二进制数据,其中 n 的取值范围为 1 到 8,000。存储大小为 n 字节。
import { binary, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
binary: binary(),
binary1: binary({ length: 256 })
});CREATE TABLE [table] (
[binary] binary,
[binary1] binary(256)
);可变长度二进制数据。n 的取值范围为 1 到 8,000。max 表示最大存储大小为 2^31-1 字节
import { varbinary, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
varbinary: varbinary(),
varbinary1: varbinary({ length: 256 }),
varbinary2: varbinary({ length: 'max' })
});CREATE TABLE [table] (
[varbinary] varbinary,
[varbinary1] varbinary(256),
[varbinary2] varbinary(max)
);numeric
固定精度和小数位数的数字。当使用最大精度时,有效值范围为 -10^38 + 1 到 10^38 - 1
更多信息请参考官方 MSSQL 文档。
import { numeric, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
numeric1: numeric(),
numeric2: numeric({ precision: 100 }),
numeric3: numeric({ precision: 100, scale: 20 })
// numericNum: numeric({ mode: 'number' }),
// numericBig: numeric({ mode: 'bigint' }),
});CREATE TABLE [table] (
[numeric1] numeric,
[numeric2] numeric(100),
[numeric3] numeric(100, 20)
);numeric。 的别名
real 的 ISO 同义词是 float(24)。
更多信息请参考官方 MSSQL 文档。
import { real, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
real1: real(),
real2: real().default(10.10)
});CREATE TABLE [table] (
[real1] real,
[real2] real CONSTRAINT [table_real2_default] DEFAULT ((10.1))
);float [ (n) ] 其中 n 是用于以科学计数法存储 float 数字尾数的位数,因此决定了精度和存储大小。如果指定了 n,则必须是 1 到 53 之间的值。n 的默认值为 53。
更多信息请参考官方 MSSQL 文档。
import { float, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
float1: float(),
float2: float({ precision: 16 })
});CREATE TABLE [table] (
[float1] float,
[float2] float(16)
);time
定义一天中的时间。该时间不包含时区信息,并基于 24 小时制。
更多信息请参阅官方 MSSQL 文档
import { time, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
time1: time(),
time2: time({ mode: 'string' }),
time3: time({ precision: 6 }),
time4: time({ precision: 6, mode: 'date' })
});CREATE TABLE [table] (
[time1] time,
[time2] time,
[time3] time(6),
[time4] time(6)
);date
日历日期(年、月、日)
更多信息请参阅官方 MSSQL 文档
import { date, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
date: date(),
});CREATE TABLE [table] (
[date] date
);你可以指定 date 或 string 推断模式:
// 将推断为 date
date: date({ mode: "date" }),
// 将推断为 string
date: date({ mode: "string" }),datetime
定义一个与一天中的时间相结合的日期,包含基于 24 小时制的秒小数部分。
新项目中应避免使用 datetime。请改用 time、date、datetime2 和 datetimeoffset 数据类型。这些类型符合 SQL 标准,并且更具可移植性。time、datetime2 和 datetimeoffset 提供更高的秒精度。datetimeoffset 为全球部署的应用程序提供时区支持。
更多信息请参阅官方 MSSQL 文档
import { datetime, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
datetime: datetime(),
});CREATE TABLE [table] (
[datetime] datetime
);你可以指定 date 或 string 推断模式:
// 将推断为 date
datetime: datetime({ mode: "date" }),
// 将推断为 string
datetime: datetime({ mode: "string" }),datetime2
定义一个与一天中的时间相结合的日期,基于 24 小时制。datetime2 可视为现有 datetime 类型的扩展,具有更大的日期范围、更高的默认小数精度以及可由用户指定的可选精度。
更多信息请参阅官方 MSSQL 文档
import { datetime2, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
datetime2: datetime2(),
});CREATE TABLE [table] (
[datetime2] datetime2
);你可以指定 date 或 string 推断模式:
// 将推断为 date
datetime2: datetime2({ mode: "date" }),
// 将推断为 string
datetime2: datetime2({ mode: "string" }),datetimeoffset
定义一个与一天中的时间相结合的日期,基于 24 小时制,类似于 datetime2,并基于协调世界时(UTC)增加时区感知。
更多信息请参阅官方 MSSQL 文档
import { datetimeoffset, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
datetimeoffset: datetimeoffset(),
});CREATE TABLE [table] (
[datetimeoffset] datetimeoffset
);你可以指定 date 或 string 推断模式:
// 将推断为 date
datetimeoffset: datetimeoffset({ mode: "date" }),
// 将推断为 string
datetimeoffset: datetimeoffset({ mode: "string" }),每个列构建器都有一个 .$type() 方法,它允许你自定义该列的数据类型。
这在例如未知类型或品牌类型时非常有用:
type UserId = number & { __brand: 'user_id' };
export const users = mssqlTable('users', {
id: int().$type<UserId>().primaryKey(),
});DEFAULT 子句指定当用户在执行 INSERT 时没有显式提供值时,该列要使用的默认值。
如果列定义上没有显式附加 DEFAULT 子句,
那么该列的默认值就是 NULL。
显式的 DEFAULT 子句可以指定默认值为 NULL
import { int, mssqlTable, text } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
int: int().default(42),
text: text().default('text'),
});CREATE TABLE [table] (
[int] int CONSTRAINT [table_int_default] DEFAULT ((42)),
[text] text CONSTRAINT [table_text_default] DEFAULT ('text')
);当使用 $default() 或 $defaultFn() 时,它们只是同一个函数的不同别名,
你可以在运行时生成默认值,并在所有插入查询中使用这些值。
注意:此值不会影响 drizzle-kit 的行为,它只会在 drizzle-orm 运行时使用
import { text, mssqlTable } from "drizzle-orm/mssql-core";
import { createId } from '@paralleldrive/cuid2';
export const table = mssqlTable('table', {
id: text().$defaultFn(() => createId()),
});当使用 $onUpdate() 或 $onUpdateFn() 时,它们只是同一个函数的不同别名,
你可以在运行时生成默认值,并在所有更新查询中使用这些值。
为该列添加一个动态更新值。该函数会在行被更新时调用,
并且如果没有提供其他值,则返回值将被用作该列的值。
如果没有提供默认值(或 $defaultFn),那么该函数也会在
行被插入时调用,并且返回值将被用作该列的值。
注意:此值不会影响 drizzle-kit 的行为,它只会在 drizzle-orm 运行时使用
import { int, datetime2, text, mssqlTable } from "drizzle-orm/mssql-core";
import { SQL, sql } from 'drizzle-orm';
export const table = mssqlTable('table', {
updateCounter: int().default(sql`1`).$onUpdateFn((): SQL => sql`${table.updateCounter} + 1`),
updatedAt: datetime2({ mode: 'date', precision: 3 }).$onUpdate(() => new Date()),
alwaysNull: text().$type<string | null>().$onUpdate(() => null),
});NOT NULL 约束规定相关列不能包含 NULL 值。
import { int, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
int: int().notNull(),
});CREATE TABLE [table] (
[int] int NOT NULL
);主键约束表示某一列或一组列可用作表中行的唯一标识符。 这要求这些值既唯一又非空。
import { int, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
id: int().primaryKey(),
});CREATE TABLE [table] (
[id] int,
CONSTRAINT [table_pkey] PRIMARY KEY([id])
);