이 문서의 모든 예제는 데이터베이스 컬럼 이름 별칭을 사용하지 않으며, 컬럼 이름은 TypeScript 키에서 생성됩니다.
원한다면 데이터베이스 별칭을 컬럼 이름에 사용할 수 있으며, casing
매개변수를 사용해 Drizzle의 매핑 전략을 정의할 수도 있습니다.
자세한 내용은 여기에서 확인할 수 있습니다.
우리는 모든 컬럼 타입을 기본적으로 지원합니다. 하지만 그렇지 않다면 **커스텀 타입**을 자유롭게 생성할 수 있습니다.
이 문서의 모든 예제는 데이터베이스 컬럼 이름 별칭을 사용하지 않으며, 컬럼 이름은 TypeScript 키에서 생성됩니다.
원한다면 데이터베이스 별칭을 컬럼 이름에 사용할 수 있으며, casing
매개변수를 사용해 Drizzle의 매핑 전략을 정의할 수도 있습니다.
자세한 내용은 여기에서 확인할 수 있습니다.
부호 있는 정수로, 값의 크기에 따라 0
, 1
, 2
, 3
, 4
, 6
, 또는 8
바이트로 저장됩니다.
import { int, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
int: int()
});
CREATE TABLE `table` (
`int` int,
);
import { tinyint, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
tinyint: tinyint()
});
CREATE TABLE `table` (
`tinyint` tinyint
);
import { smallint, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
smallint: smallint()
});
CREATE TABLE `table` (
`smallint` smallint
);
위 코드는 drizzle-orm
라이브러리를 사용하여 MySQL 데이터베이스에 smallint
타입의 컬럼을 생성하는 예제입니다.
smallint()
함수는 MySQL의 SMALLINT
타입을 정의합니다.mysqlTable
함수는 테이블을 생성하고, 첫 번째 인자로 테이블 이름을, 두 번째 인자로 컬럼 정의를 받습니다.smallint
컬럼을 가진 테이블을 만듭니다.이 코드를 실행하면, MySQL 데이터베이스에 table
이라는 이름의 테이블이 생성되고, smallint
컬럼이 추가됩니다.
import { mediumint, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
mediumint: mediumint()
});
CREATE TABLE `table` (
`mediumint` mediumint
);
import { bigint, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
bigint: bigint({ mode: 'number' }),
bigintUnsigned: bigint({ mode: 'number', unsigned: true })
});
bigint('...', { mode: 'number' | 'bigint' });
// bigint에 unsigned 옵션도 지정할 수 있습니다.
bigint('...', { mode: 'number' | 'bigint', unsigned: true });
CREATE TABLE `table` (
`bigint` bigint,
`bigintUnsigned` bigint unsigned,
);
bigint(M)
에서 M
설정은 숫자 타입의 표시 너비를 나타내기 때문에 생략했습니다.
import { real, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
real: real()
});
CREATE TABLE `table` (
`real` real,
);
import { real, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
realPrecision: real({ precision: 1,}),
realPrecisionScale: real({ precision: 1, scale: 1,}),
});
CREATE TABLE `table` (
`realPrecision` real(1),
`realPrecisionScale` real(1, 1),
);
import { decimal, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
decimal: decimal()
});
CREATE TABLE `table` (
`decimal` decimal,
);
import { decimal, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
decimalPrecision: decimal({ precision: 1,}),
decimalPrecisionScale: decimal({ precision: 1, scale: 1,}),
});
CREATE TABLE `table` (
`decimalPrecision` decimal(1),
`decimalPrecisionScale` decimal(1, 1),
);
import { double, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
double: double('double')
});
CREATE TABLE `table` (
`double` double,
);
import { double, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
doublePrecision: double({ precision: 1,}),
doublePrecisionScale: double({ precision: 1, scale: 1,}),
});
CREATE TABLE `table` (
`doublePrecision` double(1),
`doublePrecisionScale` double(1, 1),
);
위 예제는 double
타입을 사용하여 MySQL 테이블을 생성하는 방법을 보여줍니다. 첫 번째 예제는 기본 double
타입을 정의하고, 두 번째 예제는 정밀도(precision)와 스케일(scale)을 지정하여 double
타입을 정의합니다.
import { float, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
float: float()
});
CREATE TABLE `table` (
`float` float,
);
위 코드는 Drizzle ORM을 사용하여 MySQL 데이터베이스에 float
타입의 컬럼을 생성하는 예제입니다.
mysqlTable
함수는 MySQL 테이블을 정의합니다. 첫 번째 인자로 테이블 이름을, 두 번째 인자로 컬럼 정의를 전달합니다.float()
함수는 float
타입의 컬럼을 생성합니다. 이는 MySQL에서 부동소수점 숫자를 저장하는 데 사용됩니다.SQL 문법으로는 CREATE TABLE
을 사용하여 동일한 구조의 테이블을 생성할 수 있습니다. float
컬럼은 MySQL에서 부동소수점 숫자를 저장하는 데 적합합니다.
SERIAL
은 BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE
의 별칭입니다.
import { serial, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
serial: serial()
});
CREATE TABLE `table` (
`serial` serial AUTO_INCREMENT,
);
import { binary, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
binary: binary()
});
CREATE TABLE `table` (
`binary` binary,
);
위 예제는 drizzle-orm
라이브러리를 사용하여 MySQL 테이블을 정의하는 방법을 보여줍니다. binary
타입은 바이너리 데이터를 저장하는 데 사용됩니다. 이 타입은 데이터베이스에서 바이너리 데이터를 처리할 때 유용합니다.
import { varbinary, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
varbinary: varbinary({ length: 2 }),
});
CREATE TABLE `table` (
`varbinary` varbinary(2),
);
import { char, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
char: char(),
});
CREATE TABLE `table` (
`char` char,
);
위 코드는 drizzle-orm
라이브러리를 사용하여 MySQL 테이블을 정의하는 예제입니다. char
타입은 고정 길이 문자열을 저장하는 데 사용됩니다. 이 타입은 지정된 길이만큼의 공간을 항상 차지하며, 저장된 문자열이 그 길이보다 짧을 경우 나머지 공간은 공백으로 채워집니다.
mysqlTable
함수는 테이블을 정의하고, char
함수는 char
타입의 컬럼을 생성합니다. 이렇게 정의된 테이블은 SQL 쿼리로 생성될 때 동일한 구조를 가집니다.
{ enum: ["value1", "value2"] }
설정을 통해 insert
와 select
타입을 추론할 수 있습니다. 하지만 이 설정은 런타임 값을 검사하지 않습니다.
import { varchar, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
varchar: varchar({ length: 2 }),
});
// "value1" | "value2" | null 타입으로 추론됨
varchar: varchar({ length: 6, enum: ["value1", "value2"] })
CREATE TABLE `table` (
`varchar` varchar(2),
);
{ enum: ["value1", "value2"] }
설정을 정의하여 insert
와 select
타입을 추론할 수 있습니다. 하지만 이 설정은 런타임 값을 검사하지 않습니다.
import { text, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
text: text(),
});
// text는 "value1" | "value2" | null로 추론됩니다.
text: text({ enum: ["value1", "value2"] });
CREATE TABLE `table` (
`text` text,
);
import { boolean, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
boolean: boolean(),
});
CREATE TABLE `table` (
`boolean` boolean,
);
위 예제는 drizzle-orm/mysql-core
모듈을 사용하여 MySQL 테이블을 정의하는 방법을 보여줍니다. boolean
타입의 컬럼을 생성하는 방법을 확인할 수 있습니다. 이 컬럼은 true
또는 false
값을 저장할 수 있습니다.
import { boolean, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
date: date(),
});
CREATE TABLE `table` (
`date` date,
);
import { datetime, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
datetime: datetime(),
});
datetime('...', { mode: 'date' | "string"}),
datetime('...', { fsp : 0..6}),
CREATE TABLE `table` (
`datetime` datetime,
);
import { datetime, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
datetime: datetime({ mode: 'date', fsp: 6 }),
});
CREATE TABLE `table` (
`datetime` datetime(6),
);
import { time, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
time: time(),
timefsp: time({ fsp: 6 }),
});
time('...', { fsp: 0..6 }),
CREATE TABLE `table` (
`time` time,
`timefsp` time(6),
);
위 코드는 MySQL 데이터베이스에서 시간(time) 타입을 다루는 예제입니다. drizzle-orm
라이브러리를 사용하여 테이블을 정의하고, 시간 필드를 생성합니다.
time()
함수는 기본 시간 타입을 생성합니다.time({ fsp: 6 })
는 소수점 초(fractional seconds precision)를 6자리까지 지원하는 시간 타입을 생성합니다.time
과 time(6)
으로 각각 기본 시간 타입과 소수점 초를 지원하는 시간 타입을 정의합니다.이렇게 하면 데이터베이스에서 정밀한 시간 데이터를 저장하고 관리할 수 있습니다.
import { year, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
year: year(),
});
CREATE TABLE `table` (
`year` year,
);
위 예제는 MySQL 데이터베이스에서 year
타입을 사용하는 방법을 보여줍니다. drizzle-orm
라이브러리를 사용하여 테이블을 정의할 때 year
타입을 지정할 수 있습니다. 이 타입은 연도 데이터를 저장하는 데 적합합니다.
mysqlTable
함수를 사용하여 테이블을 정의합니다.year
함수는 MySQL의 YEAR
타입에 해당하는 컬럼을 생성합니다.year
컬럼이 YEAR
타입으로 정의됩니다.이 방식은 데이터베이스 스키마를 코드로 관리할 때 유용하며, 타입 안정성을 보장합니다.
import { timestamp, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
timestamp: timestamp(),
});
timestamp('...', { mode: 'date' | "string"}),
timestamp('...', { fsp : 0..6}),
CREATE TABLE `table` (
`timestamp` timestamp,
);
import { timestamp, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
timestamp: timestamp({ mode: 'date', fsp: 6 }),
});
CREATE TABLE `table` (
`timestamp` timestamp(6),
);
import { timestamp, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
timestamp: timestamp().defaultNow(),
});
CREATE TABLE `table` (
`timestamp` timestamp DEFAULT (now()),
);
import { json, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
json: json(),
});
CREATE TABLE `table` (
`json` json,
);
JSON 객체의 타입 추론을 위해 .$type<..>()
를 지정할 수 있습니다. 이는 런타임 값을 검사하지 않습니다.
기본값, 삽입 및 선택 스키마에 대해 컴파일 타임 보호 기능을 제공합니다.
// { foo: string } 타입으로 추론됨
json: json().$type<{ foo: string }>();
// string[] 타입으로 추론됨
json: json().$type<string[]>();
// 컴파일 오류 발생 (기본값이 타입과 일치하지 않음)
json: json().$type<{ foo: string }>().default({});
import { mysqlEnum, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
mysqlEnum: mysqlEnum(['unknown', 'known', 'popular']),
});
CREATE TABLE `table` (
`popularity` enum('unknown','known','popular'),
);
위 코드는 TypeScript와 SQL을 사용하여 MySQL 테이블을 정의하는 예제입니다. mysqlEnum
함수를 사용해 unknown
, known
, popular
세 가지 값을 가진 열거형(enum) 타입의 컬럼을 생성합니다. 이 열거형은 데이터베이스에서 특정 값만 허용하도록 제한하는 데 유용합니다.
TypeScript 코드에서는 mysqlTable
함수를 사용해 테이블을 정의하고, mysqlEnum
함수로 열거형 컬럼을 추가합니다. SQL 코드에서는 enum
키워드를 사용해 동일한 열거형 컬럼을 생성합니다.
모든 컬럼 빌더는 .$type()
메서드를 제공합니다. 이 메서드를 사용하면 컬럼의 데이터 타입을 커스터마이징할 수 있습니다. 이 기능은 알려지지 않은 타입이나 브랜드 타입을 다룰 때 유용합니다.
type UserId = number & { __brand: 'user_id' };
type Data = {
foo: string;
bar: number;
};
const users = mysqlTable('users', {
id: int().$type<UserId>().primaryKey(),
jsonField: json().$type<Data>(),
});
위 예제에서 id
컬럼은 UserId
타입으로, jsonField
컬럼은 Data
타입으로 커스터마이징되었습니다. 이를 통해 특정 타입을 명시적으로 지정할 수 있습니다.
NOT NULL
제약 조건은 해당 컬럼이 NULL
값을 포함할 수 없음을 의미합니다.
import { int, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
int: int().notNull(),
});
CREATE TABLE `table` (
`int` int NOT NULL,
);
DEFAULT
절은 사용자가 INSERT
를 수행할 때 명시적으로 값을 제공하지 않았을 경우, 컬럼에 사용할 기본값을 지정합니다. 컬럼 정의에 명시적인 DEFAULT
절이 없으면, 컬럼의 기본값은 NULL
이 됩니다.
명시적인 DEFAULT
절은 기본값을 NULL
, 문자열 상수, 블롭 상수, 부호 있는 숫자, 또는 괄호로 둘러싸인 상수 표현식으로 지정할 수 있습니다.
import { int, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
int: int().default(3),
});
CREATE TABLE `table` (
`int` int DEFAULT 3,
);
$default()
또는 $defaultFn()
을 사용하면 런타임에 기본값을 생성하고, 이 값을 모든 삽입 쿼리에서 사용할 수 있습니다. 이 함수들은 uuid
, cuid
, cuid2
등 다양한 구현을 활용하는 데 도움을 줄 수 있습니다.
참고: 이 값은 drizzle-kit
동작에 영향을 미치지 않으며, drizzle-orm
에서만 런타임에 사용됩니다.
import { varchar, mysqlTable } from "drizzle-orm/mysql-core";
import { createId } from '@paralleldrive/cuid2';
const table = mysqlTable('table', {
id: varchar({ length: 128 }).$defaultFn(() => createId()),
});
$onUpdate()
또는 $onUpdateFn()
을 사용하면 런타임에 기본값을 생성하고, 이 값을 모든 업데이트 쿼리에서 사용할 수 있습니다. 이 함수는 행이 업데이트될 때 호출되며, 반환된 값이 컬럼 값으로 사용됩니다. 만약 기본값(또는 $defaultFn
)이 제공되지 않으면, 행이 삽입될 때도 이 함수가 호출되고 반환된 값이 컬럼 값으로 사용됩니다.
참고: 이 값은 drizzle-kit
동작에 영향을 미치지 않으며, drizzle-orm
에서만 런타임에 사용됩니다.
import { text, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
alwaysNull: text().$type().$onUpdate(() => null),
});
import { int, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
int: int().primaryKey(),
});
CREATE TABLE `table` (
`int` int PRIMARY KEY NOT NULL,
);
위 예제는 Drizzle ORM과 SQL을 사용하여 기본 키를 정의하는 방법을 보여줍니다. int
컬럼을 기본 키로 설정했으며, 이 컬럼은 NULL 값을 허용하지 않습니다.
import { int, mysqlTable } from "drizzle-orm/mysql-core";
const table = mysqlTable('table', {
int: int().autoincrement(),
});
CREATE TABLE `table` (
`int` int AUTO_INCREMENT
);
위 예제는 데이터베이스 테이블에서 자동으로 증가하는 값을 설정하는 방법을 보여줍니다. drizzle-orm
라이브러리를 사용하여 TypeScript에서 테이블을 정의할 때, int().autoincrement()
를 사용하면 해당 컬럼이 자동 증가 값으로 설정됩니다. 이는 SQL에서 AUTO_INCREMENT
키워드를 사용하는 것과 동일한 효과를 가집니다.