이 페이지는 drizzle 버전 1.0.0-beta.2 이상에서 사용 가능한 개념을 설명합니다.
MSSQL 컬럼 타입
npm i drizzle-orm@beta
npm i drizzle-kit@beta -D
모든 타입에 대한 네이티브 지원을 제공하지만, 충분하지 않다면 **커스텀 타입**을 자유롭게 생성할 수 있습니다.
이 문서의 모든 예제는 데이터베이스 컬럼 이름 별칭을 사용하지 않으며, 컬럼 이름은 TypeScript 키에서 생성됩니다.
원한다면 컬럼 이름에 데이터베이스 별칭을 사용할 수 있고, Drizzle의 매핑 전략을 정의하기 위해 casing 매개변수를 사용할 수도 있습니다.
자세한 내용은 여기를 참조하세요.
int
부호 있는 4바이트 정수
import { int, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
int: int()
});
CREATE TABLE [table] (
[int] int
);import { sql } from "drizzle-orm";
import { int, mssqlTable } from "drizzle-orm/mssql-core";
export const table = pgTable('table', {
int1: int().default(10),
});
CREATE TABLE [table] (
[int1] int DEFAULT 10
);smallint
smallint
부호 있는 2바이트 정수
import { smallint, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
smallint: smallint()
});CREATE TABLE [table] (
[smallint] smallint
);import { sql } from "drizzle-orm";
import { smallint, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
smallint1: smallint().default(10),
});CREATE TABLE [table] (
[smallint1] smallint DEFAULT 10
);tinyint
tinyint
부호 있는 1바이트 정수
import { tinyint, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
tinyint: tinyint()
});CREATE TABLE [table] (
[tinyint] tinyint
);import { sql } from "drizzle-orm";
import { tinyint, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
tinyint1: tinyint().default(10),
});CREATE TABLE [table] (
[tinyint1] tinyint DEFAULT 10
);bigint
bigint
부호 있는 8바이트 정수
2^31보다 크지만 2^53보다 작은 값을 예상하는 경우, mode: 'number'를 사용하여 bigint 대신 JavaScript number를 사용할 수 있습니다.
import { bigint, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
bigint: bigint({ mode: 'number' })
});
// will be inferred as `number`
bigint: bigint({ mode: 'number' })
// will be inferred as `bigint`
bigint: bigint({ mode: 'bigint' })
// will be inferred as `string`
bigint: bigint({ mode: 'string' })CREATE TABLE [table] (
[bigint] bigint
);import { sql } from "drizzle-orm";
import { bigint, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
bigint1: bigint({ mode: 'number' }).default(10)
});CREATE TABLE [table] (
[bigint1] bigint DEFAULT 10
);---
bit
1, 0 또는 NULL 값을 가질 수 있는 정수 데이터 타입
Drizzle은 1과 0 대신 true 또는 false 값을 허용합니다
import { bit, mssqlTable } from "drizzle-orm/mssql-core";
export const table = mssqlTable('table', {
bit: bit()
});
CREATE TABLE [table] (
[bit] bit
);---
text
text
서버의 코드 페이지에 있는 가변 길이 non-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
text
최대 문자열 길이가 2^30 - 1 (1,073,741,823)인 가변 길이 Unicode 데이터입니다.
자세한 내용은 공식 MSSQL **문서**를 참조하세요.
{ enum: ["value1", "value2"] } 설정을 정의하여 insert 및 select 타입을 추론할 수 있습니다. 이는 런타임 값을 검사하지 않습니다.
import { text, 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
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
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
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,
[char2] char(256)
);nchar
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,
[nchar2] nchar(256)
);---
binary
n바이트 길이의 고정 길이 바이너리 데이터입니다. 여기서 n은 1부터 8,000까지의 값입니다. 저장 크기는 n바이트입니다.
import { binary, mssqlTable } from "drizzle-orm/mssql-core";
const table = mssqlTable('table', {
binary: binary(),
binary1: binary({ length: 256 })
});CREATE TABLE [table] (
[binary] binary,
[binary1] binary(256)
);varbinary
가변 길이 바이너리 데이터입니다. n은 1부터 8,000까지의 값을 가질 수 있습니다. max는 최대 저장 크기가 2^31-1 바이트임을 나타냅니다
import { varbinary, mssqlTable } from "drizzle-orm/mssql-core";
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
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)
);decimal
**numeric**의 별칭입니다.
real
real의 ISO 동의어는 float(24)입니다.
자세한 내용은 공식 MSSQL **문서**를 참조하세요.
import { sql } from "drizzle-orm";
import { real, mssqlTable } from "drizzle-orm/mssql-core";
const table = mssqlTable('table', {
real1: real(),
real2: real().default(10.10)
});CREATE TABLE [table] (
[real1] real,
[real2] real default 10.10
);float
float [ (n) ] 여기서 n은 과학적 표기법으로 float 숫자의 가수를 저장하는 데 사용되는 비트 수이므로 정밀도와 저장 크기를 결정합니다. n이 지정된 경우 1에서 53 사이의 값이어야 합니다. n의 기본값은 53입니다.
자세한 내용은 공식 MSSQL **문서**를 참조하세요.
import { sql } from "drizzle-orm";
import { float, mssqlTable } from "drizzle-orm/mssql-core";
const table = mssqlTable('table', {
float1: float(),
float1: float({ precision: 16 })
});CREATE TABLE [table] (
[float1] float,
[float2] float(16)
);---
time
time
하루 중 시간을 정의합니다. 시간은 시간대 인식이 없으며 24시간제를 기반으로 합니다.
자세한 내용은 공식 MSSQL **문서**를 참조하세요.
import { time, mssqlTable } from "drizzle-orm/mssql-core";
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
date
달력 날짜 (년, 월, 일)
자세한 내용은 공식 MSSQL **문서**를 참조하세요.
import { date, mssqlTable } from "drizzle-orm/mssql-core";
const table = mssqlTable('table', {
date: date(),
});CREATE TABLE [table] (
[date] date
);date 또는 string 추론 모드를 지정할 수 있습니다:
// date로 추론됩니다
date: date({ mode: "date" }),
// string으로 추론됩니다
date: date({ mode: "string" }),datetime
datetime
24시간제를 기반으로 하는 소수 초 단위의 시간과 결합된 날짜를 정의합니다.
새로운 작업에는 datetime 사용을 피하세요. 대신 time, date, datetime2 및 datetimeoffset 데이터 타입을 사용하세요. 이러한 타입은 SQL 표준에 부합하며 이식성이 더 좋습니다. time, datetime2 및 datetimeoffset은 더 높은 초 정밀도를 제공합니다. datetimeoffset은 전 세계적으로 배포되는 애플리케이션을 위한 시간대 지원을 제공합니다.
자세한 내용은 공식 MSSQL **문서**를 참조하세요.
import { datetime, mssqlTable } from "drizzle-orm/mssql-core";
const table = mssqlTable('table', {
datetime: datetime(),
});CREATE TABLE [table] (
[datetime] datetime
);date 또는 string 추론 모드를 지정할 수 있습니다:
// date로 추론됩니다
datetime: datetime({ mode: "date" }),
// string으로 추론됩니다
datetime: datetime({ mode: "string" }),datetime2
datetime2
24시간제를 기반으로 하는 시간과 결합된 날짜를 정의합니다. datetime2는 더 넓은 날짜 범위, 더 큰 기본 소수 정밀도 및 선택적 사용자 지정 정밀도를 가진 기존 datetime 타입의 확장으로 간주될 수 있습니다.
자세한 내용은 공식 MSSQL **문서**를 참조하세요.
import { datetime2, mssqlTable } from "drizzle-orm/mssql-core";
const table = mssqlTable('table', {
datetime2: datetime2(),
});CREATE TABLE [table] (
[datetime2] datetime2
);date 또는 string 추론 모드를 지정할 수 있습니다:
// date로 추론됩니다
datetime2: datetime2({ mode: "date" }),
// string으로 추론됩니다
datetime2: datetime2({ mode: "string" }),datetimeoffset
datetimeoffset
datetime2와 같이 24시간제를 기반으로 하는 시간과 결합된 날짜를 정의하며, 협정 세계시(UTC)를 기반으로 한 시간대 인식을 추가합니다.
자세한 내용은 공식 MSSQL **문서**를 참조하세요.
import { datetimeoffset, mssqlTable } from "drizzle-orm/mssql-core";
const table = mssqlTable('table', {
datetimeoffset: datetimeoffset(),
});CREATE TABLE [table] (
[datetimeoffset] datetimeoffset
);date 또는 string 추론 모드를 지정할 수 있습니다:
// date로 추론됩니다
datetimeoffset: datetimeoffset({ mode: "date" }),
// string으로 추론됩니다
datetimeoffset: datetimeoffset({ mode: "string" }),---
데이터 타입 커스터마이징
모든 컬럼 빌더는 .$type() 메서드를 가지고 있으며, 이를 통해 컬럼의 데이터 타입을 커스터마이징할 수 있습니다.
예를 들어 unknown 또는 branded 타입에 유용합니다:
type UserId = number & { __brand: 'user_id' };
type Data = {
foo: string;
bar: number;
};
const users = mssqlTable('users', {
id: int().$type<UserId>().primaryKey(),
jsonField: json().$type<Data>(),
});기본값
DEFAULT 절은 INSERT 시 사용자가 명시적으로 값을 제공하지 않은 경우 컬럼에 사용할 기본값을 지정합니다.
컬럼 정의에 명시적인 DEFAULT 절이 없으면 컬럼의 기본값은 NULL입니다.
명시적 DEFAULT 절은 기본값이 NULL, 문자열 상수, blob 상수, 부호 있는 숫자 또는 괄호로 묶인 모든 상수 표현식임을 지정할 수 있습니다.
import { sql } from "drizzle-orm";
import { int, mssqlTable, text } from "drizzle-orm/mssql-core";
const table = mssqlTable('table', {
integer: integer().default(42),
text: text().default('text'),
});CREATE TABLE [table] (
[integer1] integer DEFAULT 42,
[text] text DEFAULT 'text',
);$default() 또는 $defaultFn()을 사용할 때 (이들은 동일한 함수에 대한 다른 별칭일 뿐입니다), 런타임에 기본값을 생성하고 모든 삽입 쿼리에서 이러한 값을 사용할 수 있습니다.
참고: 이 값은 drizzle-kit 동작에 영향을 주지 않으며, drizzle-orm에서 런타임에만 사용됩니다
import { text, mssqlTable } from "drizzle-orm/mssql-core";
import { createId } from '@paralleldrive/cuid2';
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";
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
NOT NULL 제약조건은 연결된 컬럼이 NULL 값을 포함할 수 없음을 명시합니다.
import { int, mssqlTable } from "drizzle-orm/mssql-core";
const table = mssqlTable('table', {
int: int().notNull(),
});CREATE TABLE [table] (
[int] int NOT NULL
);기본 키
기본 키 제약조건은 컬럼 또는 컬럼 그룹이 테이블의 행에 대한 고유 식별자로 사용될 수 있음을 나타냅니다. 이를 위해서는 값이 고유하고 null이 아니어야 합니다.
import { int, mssqlTable } from "drizzle-orm/mssql-core";
const table = pgTable('table', {
id: int().primaryKey(),
});CREATE TABLE [table] (
[id] int PRIMARY KEY
);