Hi there! Are you looking for the official Deno documentation? Try docs.deno.com for all your Deno learning needs.

CreateTableBuilder

This builder can be used to create a create table query.

class CreateTableBuilder<TB extends string, C extends string = never> implements OperationNodeSource, Compilable {
constructor(props: CreateTableBuilderProps);
$call<T>(func: (qb: this) => T): T;
addCheckConstraint(constraintName: string, checkExpression: Expression<any>): CreateTableBuilder<TB, C>;
addColumn<CN extends string>(
columnName: CN,
): CreateTableBuilder<TB, C | CN>;
addForeignKeyConstraint(
constraintName: string,
columns: C[],
targetTable: string,
targetColumns: string[],
): CreateTableBuilder<TB, C>;
addPrimaryKeyConstraint(constraintName: string, columns: C[]): CreateTableBuilder<TB, C>;
addUniqueConstraint(
constraintName: string,
columns: C[],
): CreateTableBuilder<TB, C>;
as(expression: Expression<unknown>): CreateTableBuilder<string, never>;
compile(): CompiledQuery;
execute(): Promise<void>;
ifNotExists(): CreateTableBuilder<TB, C>;
modifyEnd(modifier: Expression<any>): CreateTableBuilder<TB, C>;
modifyFront(modifier: Expression<any>): CreateTableBuilder<TB, C>;
onCommit(onCommit: OnCommitAction): CreateTableBuilder<TB, C>;
temporary(): CreateTableBuilder<TB, C>;
toOperationNode(): CreateTableNode;
}

§Type Parameters

§
TB extends string
[src]
§
C extends string = never
[src]

§Implements

§Constructors

§
new CreateTableBuilder(props: CreateTableBuilderProps)
[src]

§Methods

§
$call<T>(func: (qb: this) => T): T
[src]

Calls the given function passing this as the only argument.

Examples

db.schema
  .createTable('test')
  .$call((builder) => builder.addColumn('id', 'integer'))
  .execute()
const addDefaultColumns = <T extends string, C extends string = never>(
  builder: CreateTableBuilder<T, C>
) => {
  return builder
    .addColumn('id', 'integer', (col) => col.notNull())
    .addColumn('created_at', 'date', (col) =>
      col.notNull().defaultTo(sql`now()`)
    )
    .addColumn('updated_at', 'date', (col) =>
      col.notNull().defaultTo(sql`now()`)
    )
}

db.schema
  .createTable('test')
  .$call(addDefaultColumns)
  .execute()
§
addCheckConstraint(constraintName: string, checkExpression: Expression<any>): CreateTableBuilder<TB, C>
[src]

Adds a check constraint.

The constraint name can be anything you want, but it must be unique across the whole database.

Examples

import { sql } from 'kysely'

addCheckConstraint('check_legs', sql`number_of_legs < 5`)
§
addColumn<CN extends string>(columnName: CN, dataType: DataTypeExpression, build?: ColumnBuilderCallback): CreateTableBuilder<TB, C | CN>
[src]

Adds a column to the table.

Examples

import { sql } from 'kysely'

await db.schema
  .createTable('person')
  .addColumn('id', 'integer', (col) => col.autoIncrement().primaryKey()),
  .addColumn('first_name', 'varchar(50)', (col) => col.notNull())
  .addColumn('last_name', 'varchar(255)')
  .addColumn('bank_balance', 'numeric(8, 2)')
  // You can specify any data type using the `sql` tag if the types
  // don't include it.
  .addColumn('data', sql`any_type_here`)
  .addColumn('parent_id', 'integer', (col) =>
    col.references('person.id').onDelete('cascade'))
  )

With this method, it's once again good to remember that Kysely just builds the query and doesn't provide the same API for all databases. For example, some databases like older MySQL don't support the references statement in the column definition. Instead foreign key constraints need to be defined in the create table query. See the next example:

  .addColumn('parent_id', 'integer')
  .addForeignKeyConstraint(
    'person_parent_id_fk', ['parent_id'], 'person', ['id'],
    (cb) => cb.onDelete('cascade')
  )

Another good example is that PostgreSQL doesn't support the auto_increment keyword and you need to define an autoincrementing column for example using serial:

await db.schema
  .createTable('person')
  .addColumn('id', 'serial', (col) => col.primaryKey()),
§
addForeignKeyConstraint(constraintName: string, columns: C[], targetTable: string, targetColumns: string[], build?: ForeignKeyConstraintBuilderCallback): CreateTableBuilder<TB, C>
[src]

Adds a foreign key constraint.

The constraint name can be anything you want, but it must be unique across the whole database.

Examples

addForeignKeyConstraint(
  'owner_id_foreign',
  ['owner_id'],
  'person',
  ['id'],
)

Add constraint for multiple columns:

addForeignKeyConstraint(
  'owner_id_foreign',
  ['owner_id1', 'owner_id2'],
  'person',
  ['id1', 'id2'],
  (cb) => cb.onDelete('cascade')
)
§
addPrimaryKeyConstraint(constraintName: string, columns: C[]): CreateTableBuilder<TB, C>
[src]

Adds a primary key constraint for one or more columns.

The constraint name can be anything you want, but it must be unique across the whole database.

Examples

addPrimaryKeyConstraint('primary_key', ['first_name', 'last_name'])
§
addUniqueConstraint(constraintName: string, columns: C[], build?: UniqueConstraintNodeBuilderCallback): CreateTableBuilder<TB, C>
[src]

Adds a unique constraint for one or more columns.

The constraint name can be anything you want, but it must be unique across the whole database.

Examples

addUniqueConstraint('first_name_last_name_unique', ['first_name', 'last_name'])

In dialects such as PostgreSQL you can specify nulls not distinct as follows:

addUniqueConstraint('first_name_last_name_unique', ['first_name', 'last_name'], (builder) => builder.nullsNotDistinct())
§
as(expression: Expression<unknown>): CreateTableBuilder<string, never>
[src]

Allows to create table from select query.

Examples

db.schema.createTable('copy')
  .temporary()
  .as(db.selectFrom('person').select(['first_name', 'last_name']))
  .execute()

The generated SQL (PostgreSQL):

create temporary table "copy" as
select "first_name", "last_name" from "person"
§
execute(): Promise<void>
[src]
§
ifNotExists(): CreateTableBuilder<TB, C>
[src]

Adds the "if not exists" modifier.

If the table already exists, no error is thrown if this method has been called.

§
modifyEnd(modifier: Expression<any>): CreateTableBuilder<TB, C>
[src]

This can be used to add any additional SQL to the end of the query.

Also see {@link onCommit}.

Examples

db.schema.createTable('person')
  .addColumn('id', 'integer', col => col => primaryKey())
  .addColumn('first_name', 'varchar(64)', col => col.notNull())
  .addColumn('last_name', 'varchar(64), col => col.notNull())
  .modifyEnd(sql`collate utf8_unicode_ci`)
  .execute()

The generated SQL (MySQL):

create table `person` (
  `id` integer primary key,
  `first_name` varchar(64) not null,
  `last_name` varchar(64) not null
) collate utf8_unicode_ci
§
modifyFront(modifier: Expression<any>): CreateTableBuilder<TB, C>
[src]

This can be used to add any additional SQL to the front of the query after the create keyword.

Also see {@link temporary}.

Examples

db.schema.createTable('person')
  .modifyFront(sql`global temporary`)
  .addColumn('id', 'integer', col => col.primaryKey())
  .addColumn('first_name', 'varchar(64)', col => col.notNull())
  .addColumn('last_name', 'varchar(64), col => col.notNull())
  .execute()

The generated SQL (Postgres):

create global temporary table "person" (
  "id" integer primary key,
  "first_name" varchar(64) not null,
  "last_name" varchar(64) not null
)
§
onCommit(onCommit: OnCommitAction): CreateTableBuilder<TB, C>
[src]

Adds an "on commit" statement.

This can be used in conjunction with temporary tables on supported databases like PostgreSQL.

§
temporary(): CreateTableBuilder<TB, C>
[src]

Adds the "temporary" modifier.

Use this to create a temporary table.

§
toOperationNode(): CreateTableNode
[src]