All Products
Search
Document Center

PolarDB:Buat tabel

Last Updated:Mar 29, 2026

CREATE TABLE membuat tabel kosong baru di database saat ini. Pengguna yang menjalankan pernyataan tersebut menjadi pemilik tabel. Setelah tabel dibuat, gunakan INSERT untuk menambahkan baris dan ALTER TABLE untuk mengubah strukturnya atau menambahkan constraint.

Sintaksis

CREATE [ GLOBAL TEMPORARY ] TABLE table_name (
  { column_name data_type [ DEFAULT default_expr ]
  [ column_constraint [ ... ] ] | table_constraint } [, ...]
  )
  [ ON COMMIT { PRESERVE ROWS | DELETE ROWS } ]
  [ TABLESPACE tablespace ]

Di mana column_constraint adalah salah satu dari:

[ CONSTRAINT constraint_name ]
{ NOT NULL
  | NULL
  | UNIQUE [ USING INDEX TABLESPACE tablespace ]
  | PRIMARY KEY [ USING INDEX TABLESPACE tablespace ]
  | CHECK (expression)
  | REFERENCES reftable [ ( refcolumn ) ]
      [ ON DELETE action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

Dan table_constraint adalah salah satu dari:

[ CONSTRAINT constraint_name ]
{ UNIQUE ( column_name [, ...] )
    [ USING INDEX TABLESPACE tablespace ]
  | PRIMARY KEY ( column_name [, ...] )
      [ USING INDEX TABLESPACE tablespace ]
  | CHECK ( expression )
  | FOREIGN KEY ( column_name [, ...] )
      REFERENCES reftable [ ( refcolumn [, ...] ) ]
      [ ON DELETE action ] }
[ DEFERRABLE | NOT DEFERRABLE ]
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

Parameter

ParameterDeskripsi
GLOBAL TEMPORARYMembuat tabel temporary yang secara otomatis dihapus pada akhir sesi saat ini. Indeks yang dibuat pada tabel temporary juga bersifat temporary. Jika sebuah tabel temporary memiliki nama yang sama dengan tabel permanen, tabel permanen tersebut tidak terlihat dalam sesi saat ini kecuali dirujuk menggunakan nama lengkapnya yang mencakup skema.
table_nameNama tabel. Gunakan nama yang mencakup skema untuk merujuk tabel bila diperlukan.
column_nameNama kolom dalam tabel.
data_typeTipe data kolom. Nilainya dapat mencakup spesifikasi array.
DEFAULT default_exprEkspresi nilai default untuk kolom. Ekspresi tidak boleh mengandung subquery atau referensi ke kolom lain dalam tabel, dan tipe datanya harus sesuai dengan tipe data kolom. Jika tidak ada nilai yang dimasukkan dan tidak ada default yang didefinisikan, NULL digunakan.
CONSTRAINT constraint_nameNama opsional untuk constraint kolom atau tabel. Jika dihilangkan, sistem akan menghasilkan nama secara otomatis.
NOT NULLMencegah kolom berisi nilai NULL.
PRIMARY KEY (constraint kolom)Mengharuskan nilai kolom secara unik mengidentifikasi setiap baris dan tidak bernilai null. Sebuah tabel hanya dapat memiliki satu primary key. Kolom dalam primary key tidak boleh muncul juga dalam constraint UNIQUE. PolarDB secara otomatis membuat indeks untuk menegakkan primary key.
PRIMARY KEY ( column_name [, ...] ) (constraint tabel)Mendefinisikan primary key komposit yang mencakup beberapa kolom.
CHECK (expression)Ekspresi Boolean yang harus dievaluasi sebagai true atau unknown agar operasi INSERT atau UPDATE berhasil. Ekspresi tidak boleh mengandung subquery atau referensi ke variabel di luar baris saat ini.
REFERENCES reftable [ ( refcolumn ) ] [ ON DELETE action ] (constraint kolom)Mendefinisikan kendala kunci asing. Jika refcolumn dihilangkan, primary key dari reftable digunakan. Kolom yang dirujuk harus termasuk dalam constraint UNIQUE atau PRIMARY KEY pada tabel yang dirujuk. Jika kolom yang dirujuk sering berubah, tambahkan indeks pada kolom kunci asing agar aksi referensial tetap efisien.
FOREIGN KEY ( column [, ...] ) REFERENCES reftable [ ( refcolumn [, ...] ) ] [ ON DELETE action ] (constraint tabel)Mendefinisikan kendala kunci asing yang mencakup beberapa kolom.
ON DELETE actionAksi yang diambil ketika baris yang dirujuk dihapus. Aksi referensial tidak dapat ditunda meskipun constraint-nya bersifat deferrable. Aksi yang didukung: CASCADE (menghapus atau memperbarui baris yang mereferensikan baris yang dihapus) dan SET NULL (mengatur nilai kolom referensi menjadi NULL).
DEFERRABLE / NOT DEFERRABLEApakah pemeriksaan constraint dapat ditunda hingga akhir transaksi. Gunakan SET CONSTRAINTS untuk menunda constraint yang deferrable. Hanya constraint kunci asing yang mendukung opsi ini; semua constraint lain bersifat non-deferrable. Default: NOT DEFERRABLE.
INITIALLY IMMEDIATE / INITIALLY DEFERREDKapan constraint deferrable diperiksa. INITIALLY IMMEDIATE memeriksa constraint setelah setiap pernyataan (default). INITIALLY DEFERRED memeriksanya pada akhir transaksi. Gunakan SET CONSTRAINTS untuk mengganti pengaturan ini pada waktu proses.
ON COMMITAksi yang diambil pada tabel temporary di akhir blok transaksi. PRESERVE ROWS (default) mempertahankan semua baris. DELETE ROWS menghapus semua baris, setara dengan menjalankan TRUNCATE pada setiap commit.
TABLESPACE tablespaceTablespace tempat tabel dibuat.

Catatan penggunaan

  • Jika nama skema disertakan (misalnya, CREATE TABLE myschema.mytable), tabel dibuat dalam skema tersebut; jika tidak, tabel dibuat dalam skema saat ini.

  • Tabel temporary selalu berada dalam skema khusus; jangan tentukan skema saat membuatnya.

  • Nama tabel harus unik dalam skema — tidak boleh sama dengan nama tabel, sequence, indeks, atau view yang sudah ada.

  • CREATE TABLE juga membuat tipe data komposit yang merepresentasikan satu baris tabel. Nama tabel tidak boleh sama dengan nama tipe data yang sudah ada dalam skema yang sama.

  • Sebuah tabel dapat memiliki hingga 1.600 kolom. Dalam praktiknya, batas efektif mungkin lebih rendah karena kendala panjang tupel.

  • Constraint kolom berlaku untuk satu kolom saja. Constraint tabel berlaku untuk beberapa kolom. Untuk kemudahan manajemen, constraint satu kolom dapat ditulis dalam bentuk mana pun.

  • PolarDB secara otomatis membuat indeks untuk setiap constraint UNIQUE dan PRIMARY KEY; tidak perlu membuat indeks secara eksplisit.

Catatan kompatibilitas

CREATE TABLE pada PolarDB for Oracle berperilaku berbeda dari database Oracle dalam hal-hal berikut:

  • Temporary table visibility: Tabel temporary hanya terlihat dalam sesi saat ini. Mekanisme ini berbeda dari mekanisme tabel temporary global pada database Oracle.

  • Default ON COMMIT: Perilaku default adalah PRESERVE ROWS. Pada Oracle, default-nya adalah DELETE ROWS.

Contoh

Buat dua tabel yang saling terkait

Contoh berikut membuat tabel dept dan tabel emp dengan kunci asing yang mereferensikan dept.

CREATE TABLE dept (
    deptno          NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
    dname           VARCHAR2(14),
    loc             VARCHAR2(13)
);

CREATE TABLE emp (
    empno           NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
    ename           VARCHAR2(10),
    job             VARCHAR2(9),
    mgr             NUMBER(4),
    hiredate        DATE,
    sal             NUMBER(7,2),
    comm            NUMBER(7,2),
    deptno          NUMBER(2) CONSTRAINT emp_ref_dept_fk
                        REFERENCES dept(deptno)
);

Tambahkan constraint UNIQUE

CREATE TABLE dept (
    deptno          NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
    dname           VARCHAR2(14) CONSTRAINT dept_dname_uq UNIQUE,
    loc             VARCHAR2(13)
);

Tambahkan constraint CHECK tingkat kolom

CREATE TABLE emp (
    empno           NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
    ename           VARCHAR2(10),
    job             VARCHAR2(9),
    mgr             NUMBER(4),
    hiredate        DATE,
    sal             NUMBER(7,2) CONSTRAINT emp_sal_ck CHECK (sal > 0),
    comm            NUMBER(7,2),
    deptno          NUMBER(2) CONSTRAINT emp_ref_dept_fk
                        REFERENCES dept(deptno)
);

Tambahkan constraint CHECK tingkat tabel

CREATE TABLE emp (
    empno           NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
    ename           VARCHAR2(10),
    job             VARCHAR2(9),
    mgr             NUMBER(4),
    hiredate        DATE,
    sal             NUMBER(7,2),
    comm            NUMBER(7,2),
    deptno          NUMBER(2) CONSTRAINT emp_ref_dept_fk
                        REFERENCES dept(deptno),
    CONSTRAINT new_emp_ck CHECK (ename IS NOT NULL AND empno > 7000)
);

Definisikan primary key komposit

Contoh berikut membuat tabel jobhist dengan primary key komposit pada empno dan startdate.

CREATE TABLE jobhist (
    empno           NUMBER(4) NOT NULL,
    startdate       DATE NOT NULL,
    enddate         DATE,
    job             VARCHAR2(9),
    sal             NUMBER(7,2),
    comm            NUMBER(7,2),
    deptno          NUMBER(2),
    chgdesc         VARCHAR2(80),
    CONSTRAINT jobhist_pk PRIMARY KEY (empno, startdate)
);

Tentukan nilai default kolom

Kolom job memiliki nilai default 'SALESMAN'. Kolom hiredate memiliki nilai default tanggal saat baris dimasukkan.

CREATE TABLE emp (
    empno           NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
    ename           VARCHAR2(10),
    job             VARCHAR2(9) DEFAULT 'SALESMAN',
    mgr             NUMBER(4),
    hiredate        DATE DEFAULT SYSDATE,
    sal             NUMBER(7,2),
    comm            NUMBER(7,2),
    deptno          NUMBER(2) CONSTRAINT emp_ref_dept_fk
                        REFERENCES dept(deptno)
);

Buat tabel dalam tablespace tertentu

CREATE TABLE dept (
    deptno          NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
    dname           VARCHAR2(14),
    loc             VARCHAR2(13)
) TABLESPACE diskvol1;

Langkah selanjutnya

  • Untuk mengubah struktur atau constraint tabel yang sudah ada, gunakan ALTER TABLE.

  • Untuk menghapus tabel, gunakan DROP TABLE.

  • Untuk menambahkan indeks selain yang dibuat secara otomatis untuk primary key dan constraint unique, gunakan CREATE INDEX.

  • Untuk mengisi tabel dengan data, gunakan INSERT.