Adds auto_increment
or autoincrement
to the column definition
depending on the dialect.
Some dialects like PostgreSQL don't support this. On PostgreSQL
you can use the serial
or bigserial
data type instead.
Adds a check constraint for the column.
import { sql } from 'kysely'
db.schema
.createTable('pet')
.addColumn('number_of_legs', 'integer', (col) =>
col.check(sql`number_of_legs < 5`)
)
.execute()
Adds a default value constraint for the column.
db.schema
.createTable('pet')
.addColumn('number_of_legs', 'integer', (col) => col.defaultTo(4))
.execute()
Values passed to defaultTo
are interpreted as value literals by default. You can define
an arbitrary SQL expression using the sql template tag:
import { sql } from 'kysely'
db.schema
.createTable('pet')
.addColumn(
'number_of_legs',
'integer',
(col) => col.defaultTo(sql`any SQL here`)
)
.execute()
Makes the column a generated column using a generated always as
statement.
import { sql } from 'kysely'
db.schema
.createTable('person')
.addColumn('full_name', 'varchar(255)',
(col) => col.generatedAlwaysAs(sql`concat(first_name, ' ', last_name)`)
)
.execute()
Adds the generated always as identity
specifier.
This only works on some dialects like PostgreSQL.
For MS SQL Server (MSSQL)'s identity column use identity.
Adds the generated by default as identity
specifier on supported dialects.
Makes the column an identity column.
This only works on some dialects like MS SQL Server (MSSQL).
For PostgreSQL's generated always as identity
use generatedAlwaysAsIdentity.
This can be used to add any additional SQL to the end of the column definition.
db.schema.createTable('person')
.addColumn('id', 'integer', col => col.primaryKey())
.addColumn('age', 'integer', col => col.unsigned().notNull().modifyEnd(sql`comment ${sql.lit('it is not polite to ask a woman her age')}`))
.execute()
The generated SQL (MySQL):
create table `person` (
`id` integer primary key,
`age` integer unsigned not null comment 'it is not polite to ask a woman her age'
)
This can be used to add any additional SQL right after the column's data type.
db.schema.createTable('person')
.addColumn('id', 'integer', col => col.primaryKey())
.addColumn('first_name', 'varchar(36)', col => col.modifyFront(sql`collate utf8mb4_general_ci`).notNull())
.execute()
The generated SQL (MySQL):
create table `person` (
`id` integer primary key,
`first_name` varchar(36) collate utf8mb4_general_ci not null
)
Adds a not null
constraint for the column.
Adds nulls not distinct
specifier.
Should be used with unique
constraint.
This only works on some dialects like PostgreSQL.
db.schema.createTable('person')
.addColumn('id', 'integer', col => col.primaryKey())
.addColumn('first_name', 'varchar(30)', col => col.unique().nullsNotDistinct())
.execute()
The generated SQL (PostgreSQL):
create table "person" (
"id" integer primary key,
"first_name" varchar(30) unique nulls not distinct
)
Adds an on delete
constraint for the foreign key column.
If your database engine doesn't support foreign key constraints in the column definition (like MySQL 5) you need to call the table level addForeignKeyConstraint method instead.
col.references('person.id').onDelete('cascade')
Adds an on update
constraint for the foreign key column.
col.references('person.id').onUpdate('cascade')
Makes the column the primary key.
If you want to specify a composite primary key use the addPrimaryKeyConstraint method.
Adds a foreign key constraint for the column.
If your database engine doesn't support foreign key constraints in the column definition (like MySQL 5) you need to call the table level addForeignKeyConstraint method instead.
col.references('person.id')
Makes a generated column stored instead of virtual. This method can only be used with generatedAlwaysAs
db.schema
.createTable('person')
.addColumn('full_name', 'varchar(255)', (col) => col
.generatedAlwaysAs("concat(first_name, ' ', last_name)")
.stored()
)
.execute()
Adds a unique constraint for the column.
Adds a unsigned
modifier for the column.
This only works on some dialects like MySQL.
Generated using TypeDoc
Simply calls the provided function passing
this
as the only argument.$call
returns what the provided function returns.