부호 있는 정수로, 값의 크기에 따라 0, 1, 2, 3, 4, 6, 또는 8 바이트로 저장됩니다.
tinyint
위 코드는 tinyint 타입을 사용하여 MySQL 테이블을 생성하는 예제입니다. drizzle-orm/mysql-core 모듈에서 tinyint와 singlestoreTable을 가져와서 테이블을 정의합니다. SQL 쿼리에서는 tinyint 컬럼을 생성합니다.
smallint
mediumint
위 코드는 mediumint 타입을 사용하여 MySQL 테이블을 생성하는 예제입니다. drizzle-orm/mysql-core 모듈에서 mediumint와 singlestoreTable을 가져와서 테이블을 정의합니다. 이 테이블은 mediumint라는 컬럼을 가지며, 이 컬럼은 MySQL의 mediumint 타입을 사용합니다. SQL 문으로는 CREATE TABLE을 사용하여 동일한 구조의 테이블을 생성합니다.
bigint
bigint(M)에서 M 설정은 숫자 타입의 표시 너비를 나타내므로 생략했습니다.
---
실수 타입(real)
decimal 타입
double 타입
float
위 코드는 drizzle-orm 라이브러리를 사용하여 MySQL 데이터베이스에 float 타입의 컬럼을 생성하는 예제입니다. singlestoreTable 함수를 통해 테이블을 정의하고, float 함수를 사용하여 float 타입의 컬럼을 추가합니다. 이렇게 정의된 테이블은 SQL 쿼리로 변환되어 데이터베이스에 생성됩니다.
---
SERIAL
SERIAL은 BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE의 별칭입니다.
---
바이너리
varbinary
---
char 타입
위 코드는 char 타입을 사용하여 테이블을 생성하는 예제입니다. drizzle-orm/mysql-core 모듈에서 char 함수를 가져와서 테이블의 컬럼을 정의합니다. 이렇게 정의된 컬럼은 SQL에서 char 타입으로 생성됩니다.
varchar 타입
{ enum: ["value1", "value2"] } 설정을 통해 insert와 select 타입을 추론할 수 있습니다. 하지만 이 설정은 런타임 값을 검사하지 않습니다.
위 예제에서 varchar 컬럼은 길이가 2인 문자열로 정의되었습니다. enum 설정을 통해 타입을 추론할 수 있지만, 실제 데이터베이스에서는 이 설정이 적용되지 않습니다.
텍스트
{ enum: ["value1", "value2"] } 설정을 정의하여 insert와 select 타입을 추론할 수 있습니다. 하지만 이 설정은 런타임 값을 검사하지 않습니다.
---
불리언(Boolean)
위 예제는 drizzle-orm 라이브러리를 사용하여 MySQL 데이터베이스에 불리언 타입의 컬럼을 정의하는 방법을 보여줍니다. boolean() 함수는 테이블 스키마에서 불리언 타입의 컬럼을 생성합니다. 이 컬럼은 true 또는 false 값을 저장할 수 있습니다. SQL 문에서는 boolean 타입으로 직접 정의됩니다.
---
날짜
datetime
이 코드는 drizzle-orm/mysql-core 모듈에서 datetime과 singlestoreTable을 가져와 사용하는 예제입니다. singlestoreTable 함수를 사용해 ‘table’이라는 이름의 테이블을 생성하고, 그 안에 datetime 컬럼을 정의합니다. datetime 함수는 날짜와 시간을 저장하는 컬럼을 생성하며, mode 옵션을 통해 ‘date’ 또는 ‘string’ 타입으로 설정할 수 있습니다.
SQL 쿼리 부분에서는 CREATE TABLE 문을 사용해 동일한 구조의 테이블을 생성합니다. 여기서 datetime 컬럼은 MySQL의 datetime 타입으로 정의됩니다.
시간(time) 타입
위 예제는 Drizzle ORM을 사용하여 MySQL 데이터베이스에 time 타입의 컬럼을 정의하는 방법을 보여줍니다. time() 함수는 시간을 저장하는 컬럼을 생성합니다. 이 컬럼은 SQL의 time 타입에 해당하며, 시간 정보만을 저장합니다.
singlestoreTable 함수는 테이블을 정의하는 데 사용됩니다.
time() 함수는 시간 타입의 컬럼을 생성합니다.
생성된 SQL 쿼리는 time 타입의 컬럼을 포함하는 테이블을 생성합니다.
이렇게 정의된 테이블은 시간 데이터를 효율적으로 저장하고 관리할 수 있습니다.
year
위 코드는 year 타입을 사용하여 데이터베이스 테이블을 생성하는 예제입니다. drizzle-orm/mysql-core 모듈에서 year와 singlestoreTable을 가져와서 테이블을 정의합니다. 이 테이블은 year 컬럼을 포함하며, 이 컬럼은 MySQL의 year 타입을 사용합니다.
SQL 문법으로는 CREATE TABLE을 사용하여 동일한 구조의 테이블을 생성합니다. 이 테이블은 year 컬럼을 가지며, 이 컬럼은 MySQL의 year 타입을 사용합니다.
타임스탬프
---
JSON 타입 사용하기
JSON 객체의 타입 추론을 위해 .$type<..>()를 지정할 수 있습니다. 이는 런타임 값을 검사하지 않습니다.
기본값, 삽입 및 선택 스키마에 대해 컴파일 타임 보호 기능을 제공합니다.
---
enum 타입
위 코드는 enum 타입을 사용하는 예제입니다. TypeScript에서는 mysqlEnum을 통해 enum 타입을 정의하고, SQL에서는 enum 타입으로 컬럼을 생성합니다. enum 타입은 특정 값들 중 하나만 선택할 수 있도록 제한하는 데 유용합니다.
---
데이터 타입 커스터마이징
모든 컬럼 빌더는 .$type() 메서드를 제공합니다. 이 메서드를 사용하면 컬럼의 데이터 타입을 커스터마이징할 수 있습니다. 이 기능은 알려지지 않은 타입이나 브랜드 타입을 다룰 때 유용합니다.
NOT NULL 제약 조건
NOT NULL 제약 조건은 해당 컬럼이 NULL 값을 포함할 수 없음을 의미합니다.
기본값 설정
DEFAULT 절은 사용자가 INSERT를 수행할 때 명시적으로 값을 제공하지 않았을 경우, 컬럼에 사용할 기본값을 지정합니다. 컬럼 정의에 명시적인 DEFAULT 절이 없으면, 해당 컬럼의 기본값은 NULL이 됩니다.
명시적인 DEFAULT 절은 기본값을 NULL, 문자열 상수, 블롭 상수, 부호 있는 숫자, 또는 괄호로 둘러싸인 상수 표현식으로 지정할 수 있습니다.
$default() 또는 $defaultFn()을 사용하면 런타임에 기본값을 생성하고, 이 값을 모든 삽입 쿼리에서 사용할 수 있습니다. 이 함수들은 uuid, cuid, cuid2 등 다양한 구현을 활용하는 데 도움을 줄 수 있습니다.
참고: 이 값은 drizzle-kit 동작에 영향을 미치지 않으며, drizzle-orm에서만 런타임에 사용됩니다.
$onUpdate() 또는 $onUpdateFn()을 사용하면 런타임에 기본값을 생성하고, 이 값을 모든 업데이트 쿼리에서 사용할 수 있습니다. 이 함수는 행이 업데이트될 때 호출되며, 반환된 값이 컬럼 값으로 사용됩니다. 만약 기본값(또는 $defaultFn)이 제공되지 않았다면, 이 함수는 행이 삽입될 때도 호출되고, 반환된 값이 컬럼 값으로 사용됩니다.
참고: 이 값은 drizzle-kit 동작에 영향을 미치지 않으며, drizzle-orm에서만 런타임에 사용됩니다.
기본 키(Primary Key)
위 코드는 Drizzle ORM과 SQL을 사용하여 기본 키를 정의하는 예제입니다.
Drizzle ORM에서는 int().primaryKey()를 사용해 int 컬럼을 기본 키로 설정합니다.
SQL에서는 PRIMARY KEY 키워드를 사용해 동일한 작업을 수행합니다.
두 방식 모두 int 컬럼을 기본 키로 지정하며, 이 컬럼은 NULL 값을 허용하지 않습니다.
자동 증가(Auto Increment)
위 예제는 데이터베이스 테이블에서 자동으로 증가하는 정수 값을 생성하는 방법을 보여줍니다. drizzle-orm 라이브러리를 사용하여 MySQL 테이블을 정의할 때, int().autoincrement()를 사용하면 해당 컬럼이 자동 증가 기능을 갖게 됩니다. 이는 SQL에서 AUTO_INCREMENT 키워드를 사용하는 것과 동일한 효과를 가집니다.