부호 있는 정수로, 값의 크기에 따라 0, 1, 2, 3, 4, 6, 또는 8 바이트로 저장됩니다.
tinyint
smallint
위 코드는 drizzle-orm 라이브러리를 사용하여 MySQL 데이터베이스에 smallint 타입의 컬럼을 생성하는 예제입니다.
smallint() 함수는 MySQL의 SMALLINT 타입을 정의합니다.
mysqlTable 함수는 테이블을 생성하고, 첫 번째 인자로 테이블 이름을, 두 번째 인자로 컬럼 정의를 받습니다.
생성된 SQL 쿼리는 smallint 컬럼을 가진 테이블을 만듭니다.
이 코드를 실행하면, MySQL 데이터베이스에 table이라는 이름의 테이블이 생성되고, smallint 컬럼이 추가됩니다.
mediumint
bigint
bigint(M)에서 M 설정은 숫자 타입의 표시 너비를 나타내기 때문에 생략했습니다.
---
실수(real) 타입
decimal
double 타입
위 예제는 double 타입을 사용하여 MySQL 테이블을 생성하는 방법을 보여줍니다. 첫 번째 예제는 기본 double 타입을 정의하고, 두 번째 예제는 정밀도(precision)와 스케일(scale)을 지정하여 double 타입을 정의합니다.
float
위 코드는 Drizzle ORM을 사용하여 MySQL 데이터베이스에 float 타입의 컬럼을 생성하는 예제입니다.
mysqlTable 함수는 MySQL 테이블을 정의합니다. 첫 번째 인자로 테이블 이름을, 두 번째 인자로 컬럼 정의를 전달합니다.
float() 함수는 float 타입의 컬럼을 생성합니다. 이는 MySQL에서 부동소수점 숫자를 저장하는 데 사용됩니다.
SQL 문법으로는 CREATE TABLE을 사용하여 동일한 구조의 테이블을 생성할 수 있습니다. float 컬럼은 MySQL에서 부동소수점 숫자를 저장하는 데 적합합니다.
---
SERIAL
SERIAL은 BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE의 별칭입니다.
---
바이너리(Binary)
위 예제는 drizzle-orm 라이브러리를 사용하여 MySQL 테이블을 정의하는 방법을 보여줍니다. binary 타입은 바이너리 데이터를 저장하는 데 사용됩니다. 이 타입은 데이터베이스에서 바이너리 데이터를 처리할 때 유용합니다.
varbinary
---
char 타입
위 코드는 drizzle-orm 라이브러리를 사용하여 MySQL 테이블을 정의하는 예제입니다. char 타입은 고정 길이 문자열을 저장하는 데 사용됩니다. 이 타입은 지정된 길이만큼의 공간을 항상 차지하며, 저장된 문자열이 그 길이보다 짧을 경우 나머지 공간은 공백으로 채워집니다.
mysqlTable 함수는 테이블을 정의하고, char 함수는 char 타입의 컬럼을 생성합니다. 이렇게 정의된 테이블은 SQL 쿼리로 생성될 때 동일한 구조를 가집니다.
varchar 타입
{ enum: ["value1", "value2"] } 설정을 통해 insert와 select 타입을 추론할 수 있습니다. 하지만 이 설정은 런타임 값을 검사하지 않습니다.
텍스트
{ enum: ["value1", "value2"] } 설정을 정의하여 insert와 select 타입을 추론할 수 있습니다. 하지만 이 설정은 런타임 값을 검사하지 않습니다.
---
불리언(Boolean)
위 예제는 drizzle-orm/mysql-core 모듈을 사용하여 MySQL 테이블을 정의하는 방법을 보여줍니다. boolean 타입의 컬럼을 생성하는 방법을 확인할 수 있습니다. 이 컬럼은 true 또는 false 값을 저장할 수 있습니다.
---
날짜
datetime
시간(time)
위 코드는 MySQL 데이터베이스에서 시간(time) 타입을 다루는 예제입니다. drizzle-orm 라이브러리를 사용하여 테이블을 정의하고, 시간 필드를 생성합니다.
time() 함수는 기본 시간 타입을 생성합니다.
time({ fsp: 6 })는 소수점 초(fractional seconds precision)를 6자리까지 지원하는 시간 타입을 생성합니다.
SQL 스키마에서는 time과 time(6)으로 각각 기본 시간 타입과 소수점 초를 지원하는 시간 타입을 정의합니다.
이렇게 하면 데이터베이스에서 정밀한 시간 데이터를 저장하고 관리할 수 있습니다.
year 타입
위 예제는 MySQL 데이터베이스에서 year 타입을 사용하는 방법을 보여줍니다. drizzle-orm 라이브러리를 사용하여 테이블을 정의할 때 year 타입을 지정할 수 있습니다. 이 타입은 연도 데이터를 저장하는 데 적합합니다.
mysqlTable 함수를 사용하여 테이블을 정의합니다.
year 함수는 MySQL의 YEAR 타입에 해당하는 컬럼을 생성합니다.
생성된 SQL 쿼리에서는 year 컬럼이 YEAR 타입으로 정의됩니다.
이 방식은 데이터베이스 스키마를 코드로 관리할 때 유용하며, 타입 안정성을 보장합니다.
타임스탬프
---
JSON 타입 사용하기
JSON 객체의 타입 추론을 위해 .$type<..>()를 지정할 수 있습니다. 이는 런타임 값을 검사하지 않습니다.
기본값, 삽입 및 선택 스키마에 대해 컴파일 타임 보호 기능을 제공합니다.
---
enum (열거형)
위 코드는 TypeScript와 SQL을 사용하여 MySQL 테이블을 정의하는 예제입니다. mysqlEnum 함수를 사용해 unknown, known, popular 세 가지 값을 가진 열거형(enum) 타입의 컬럼을 생성합니다. 이 열거형은 데이터베이스에서 특정 값만 허용하도록 제한하는 데 유용합니다.
TypeScript 코드에서는 mysqlTable 함수를 사용해 테이블을 정의하고, mysqlEnum 함수로 열거형 컬럼을 추가합니다. SQL 코드에서는 enum 키워드를 사용해 동일한 열거형 컬럼을 생성합니다.
---
데이터 타입 커스터마이징
모든 컬럼 빌더는 .$type() 메서드를 제공합니다. 이 메서드를 사용하면 컬럼의 데이터 타입을 커스터마이징할 수 있습니다. 이 기능은 알려지지 않은 타입이나 브랜드 타입을 다룰 때 유용합니다.
위 예제에서 id 컬럼은 UserId 타입으로, jsonField 컬럼은 Data 타입으로 커스터마이징되었습니다. 이를 통해 특정 타입을 명시적으로 지정할 수 있습니다.
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을 사용하여 기본 키를 정의하는 방법을 보여줍니다. int 컬럼을 기본 키로 설정했으며, 이 컬럼은 NULL 값을 허용하지 않습니다.
자동 증가(Auto Increment)
위 예제는 데이터베이스 테이블에서 자동으로 증가하는 값을 설정하는 방법을 보여줍니다. drizzle-orm 라이브러리를 사용하여 TypeScript에서 테이블을 정의할 때, int().autoincrement()를 사용하면 해당 컬럼이 자동 증가 값으로 설정됩니다. 이는 SQL에서 AUTO_INCREMENT 키워드를 사용하는 것과 동일한 효과를 가집니다.