全部产品
Search
文档中心

PolarDB:Membuat tabel

更新时间:Jul 02, 2025

Topik ini menjelaskan cara membuat tabel.

Sintaksis

CREATE [ GLOBAL TEMPORARY ] TABLE nama_tabel (
  { nama_kolom tipe_data [ DEFAULT ekspresi_default ]
  [ batasan_kolom [ ... ] ]  batasan_tabel } [, ...]
  )
  [ ON COMMIT { PRESERVE ROWS  DELETE ROWS } ]
  [ TABLESPACE tablespace ]
Dalam sintaksis sebelumnya, column_constraint dapat diatur ke salah satu dari batasan berikut:
  [ CONSTRAINT nama_batasan ]
  { NOT NULL 
    NULL 
    UNIQUE [ USING INDEX TABLESPACE tablespace ] 
    PRIMARY KEY [ USING INDEX TABLESPACE tablespace ] 
    CHECK (ekspresi) 
    REFERENCES reftable [ ( refcolumn ) ]
      [ ON DELETE aksi ] }
  [ DEFERRABLE  NOT DEFERRABLE ] [ INITIALLY DEFERRED 
    INITIALLY IMMEDIATE ]
dapat diatur ke salah satu dari batasan berikut:
  [ CONSTRAINT nama_batasan ]
  { UNIQUE ( nama_kolom [, ...] )
      [ USING INDEX TABLESPACE tablespace ] 
    PRIMARY KEY ( nama_kolom [, ...] )
      [ USING INDEX TABLESPACE tablespace ] 
    CHECK ( ekspresi ) 
    FOREIGN KEY ( nama_kolom [, ...] )
        REFERENCES reftable [ ( refcolumn [, ...] ) ]
      [ ON DELETE aksi ] }
  [ DEFERRABLE  NOT DEFERRABLE ]
  [ INITIALLY DEFERRED  INITIALLY IMMEDIATE ]        

Parameter

ParameterDeskripsi
GLOBAL TEMPORARYKetika parameter ini ditentukan, tabel yang dihasilkan adalah tabel sementara. Tabel sementara secara otomatis dihapus setelah sesi saat ini berakhir. Anda juga dapat menghapus tabel sementara secara manual setelah menyelesaikan transaksi. Untuk informasi lebih lanjut, lihat deskripsi tentang parameter ON COMMIT dalam tabel ini.
Catatan
  • Jika tabel sementara memiliki nama yang sama dengan tabel permanen, tabel permanen tidak akan terlihat dalam sesi saat ini kecuali tabel permanen dirujuk menggunakan nama memenuhi skema.
  • Tabel sementara hanya terlihat dalam sesi saat ini. Mekanisme ini berbeda dari mekanisme tabel sementara global untuk basis data Oracle.
  • Indeks yang dibuat pada tabel sementara adalah indeks sementara.
nama tabelNama tabel.
Catatan Untuk merujuk tabel ini, Anda dapat menggunakan nama memenuhi skema.
nama kolomNama kolom yang ingin Anda buat di tabel.
tipe dataTipe data kolom. Nilainya dapat berisi spesifikasi array.
DEFAULT ekspresi_defaultEkspresi yang digunakan untuk menghasilkan nilai default untuk kolom yang didefinisikan. Ekspresi ini ditentukan dalam klausa DEFAULT. Ekspresi ini tidak boleh berisi subquery atau referensi ke kolom lain dalam tabel. Tipe data ekspresi default ini harus sama dengan tipe data kolom.

Ketika tidak ada nilai yang dimasukkan untuk kolom, ekspresi default ini digunakan untuk menghasilkan nilai. Jika Anda tidak menentukan ekspresi default, nilai yang digunakan adalah NULL.

CONSTRAINT nama_batasanNama batasan kolom atau tabel yang ingin Anda konfigurasikan. Parameter nama_batasan bersifat opsional. Jika Anda meninggalkan parameter ini kosong, sistem secara otomatis menghasilkan nama untuk batasan kolom atau tabel.
NOT NULLMenentukan bahwa kolom tidak boleh berisi nilai NULL.
PRIMARY KEY - batasan kolom

Menentukan bahwa satu atau beberapa kolom harus berisi nilai yang secara unik mengidentifikasi setiap baris dalam tabel dan tidak boleh berisi nilai NULL. Batasan PRIMARY KEY adalah kombinasi dari batasan UNIQUE dan NOT NULL. Namun, jika kunci utama terdiri dari sekumpulan kolom, Anda harus memberikan metadata skema. Hal ini karena kunci utama menyiratkan bahwa tabel lain dapat bergantung pada kumpulan kolom ini sebagai pengenal unik untuk baris.

Catatan
  • Setiap tabel hanya dapat memiliki satu kunci utama, baik kunci utama digunakan sebagai batasan kolom maupun batasan tabel.
  • Kolom yang tercantum dalam batasan PRIMARY KEY tidak boleh digunakan dalam batasan UNIQUE lainnya dari tabel.
PRIMARY KEY ( nama_kolom [, ...] ) - batasan tabel
CHECK (ekspresi)

Ekspresi yang digunakan untuk menghasilkan hasil Boolean. Ekspresi ini ditentukan dalam klausa CHECK.

Operasi INSERT atau UPDATE hanya dapat berhasil ketika ekspresi ini mengevaluasi menjadi true atau unknown. Jika tidak, operasi gagal dan kesalahan dikembalikan. Jika Anda mendefinisikan batasan CHECK pada kolom, Anda dapat membatasi nilai yang dapat ditulis ke kolom tersebut. Jika Anda mendefinisikan batasan CHECK pada tabel, Anda dapat membatasi nilai yang dapat ditulis ke beberapa kolom dalam tabel.

Catatan Ekspresi ini tidak boleh berisi subquery atau referensi ke variabel selain kolom baris saat ini.
REFERENCES reftable [ ( refcolumn ) ] [ ON DELETE aksi ] - batasan kolom

Klausa ini menentukan batasan kunci asing. Batasan kunci asing mengharuskan nilai-nilai dalam kolom tabel yang dibuat harus ada dalam kolom tabel yang dirujuk. Jika parameter refcolumn tidak ditentukan, kunci utama tabel yang ditentukan oleh parameter reftable digunakan. Kolom yang dirujuk harus merupakan kolom batasan UNIQUE atau batasan PRIMARY KEY dari tabel yang dirujuk.

Jika data dalam kolom yang dirujuk diubah, operasi perubahan yang sama dilakukan pada kolom tabel ini. Klausa ON DELETE menentukan tindakan yang akan dilakukan ketika baris yang dirujuk dalam tabel yang dirujuk dihapus. Tindakan referensial tidak dapat ditunda, meskipun batasan dapat ditunda. Klausa ON DELETE mendukung tindakan referensial berikut:
  • CASCADE: menghapus baris yang merujuk baris yang dihapus, atau memperbarui nilai dalam kolom yang mencerminkan nilai kolom yang dirujuk.
  • SET NULL: mengatur nilai dalam kolom yang merujuk menjadi NULL.
Catatan Jika nilai kolom yang dirujuk sering berubah, kami sarankan Anda menambahkan indeks ke kolom kunci asing. Dengan cara ini, tindakan referensial yang terkait dengan kolom kunci asing dapat dilakukan dengan cara yang efisien.
FOREIGN KEY ( kolom [, ...] ) REFERENCES reftable [ ( refcolumn [, ...] ) ] [ ON DELETE aksi ] - batasan tabel
DEFERRABLE NOTMenentukan apakah batasan dapat ditunda. Batasan yang tidak dapat ditunda diperiksa segera setelah setiap pernyataan dieksekusi. Anda dapat menggunakan pernyataan SET CONSTRAINTS untuk menunda pemeriksaan batasan yang dapat ditunda. Ketika Anda menunda pemeriksaan batasan, batasan tidak diperiksa sampai akhir transaksi.

NOT DEFERRABLE adalah nilai default. Hanya batasan kunci asing yang mendukung nilai DEFERRABLE dan NOT DEFERRABLE. Batasan lainnya tidak dapat ditunda.

DEFERRABLE
INITIALLY IMMEDIATEWaktu ketika batasan yang dapat ditunda yang ditentukan diperiksa.

Nilai INITIALLY IMMEDIATE menentukan bahwa batasan diperiksa setelah setiap pernyataan dieksekusi. INITIALLY IMMEDIATE adalah nilai default.

Nilai INITIALLY DEFERRED menentukan bahwa batasan diperiksa setelah transaksi berakhir.

Anda dapat mengeksekusi pernyataan SET CONSTRAINTS untuk mengubah waktu ketika batasan diperiksa.
INITIALLY DEFERRED
ON COMMITTindakan yang dilakukan pada tabel sementara di akhir blok transaksi. Nilai default: PRESERVE ROWS. Nilai valid:
  • PRESERVE ROWS: Tidak ada tindakan khusus yang dilakukan di akhir setiap blok transaksi.
    Catatan Nilai default berbeda dari nilai default basis data Oracle. Nilai default basis data Oracle adalah DELETE ROWS.
  • DELETE ROWS: Semua baris dalam tabel sementara dihapus di akhir setiap blok transaksi. Pada dasarnya, operasi TRUNCATE dilakukan secara otomatis setiap kali operasi commit dilakukan.

Deskripsi

Pernyataan CREATE TABLE membuat tabel dalam basis data saat ini. Tabel awalnya kosong. Pengguna yang mengeksekusi pernyataan adalah pemilik tabel.

Jika Anda menentukan nama skema dalam pernyataan, tabel dibuat dalam skema tersebut. Jika tidak, tabel dibuat dalam skema saat ini. Sebagai contoh, jika Anda mengeksekusi pernyataan CREATE TABLE myschema.mytable, tabel mytable dibuat dalam skema myschema. Untuk tabel sementara, Anda tidak perlu menentukan skema karena tabel tersebut ada dalam skema khusus. Nama tabel harus unik dalam skema yang sama dan tidak boleh sama dengan nama objek lain seperti urutan, indeks, atau tampilan.

Pernyataan CREATE TABLE juga secara otomatis membuat tipe data komposit yang sesuai dengan baris tabel. Nama tabel tidak boleh sama dengan nama tipe data yang ada dalam skema yang sama.

Tabel dapat berisi hingga 1.600 kolom. Namun, jumlah kolom mungkin lebih sedikit dalam praktiknya karena batasan pada panjang tupel.

Batasan opsional menentukan kondisi untuk operasi INSERT atau UPDATE. Operasi hanya berhasil jika memenuhi batasan atau kondisi uji. Batasan adalah objek SQL yang membatasi nilai data yang dapat ditulis ke tabel. PolarDB menyediakan beberapa metode batasan, yang dapat didefinisikan sebagai batasan kolom atau batasan tabel.
  • Batasan kolom didefinisikan pada satu kolom.
  • Batasan tabel didefinisikan pada beberapa kolom dalam tabel.
Untuk menyederhanakan manajemen tabel, Anda dapat mendefinisikan batasan kolom sebagai batasan tabel pada satu kolom.
Catatan PolarDB secara otomatis membuat indeks untuk setiap batasan UNIQUE dan PRIMARY KEY untuk menegakkan keunikan. Dengan cara ini, Anda tidak perlu membuat indeks eksplisit untuk setiap kolom yang termasuk dalam kunci utama.

Contoh

Buat dua tabel: dept dan emp.

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)
);

Definisikan batasan tabel UNIQUE untuk tabel dept. Anda dapat mendefinisikan batasan tabel UNIQUE untuk beberapa kolom dalam tabel.

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

Definisikan batasan 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)
);            

Definisikan batasan 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 batasan PRIMARY KEY tingkat tabel untuk tabel jobhist. Batasan PRIMARY KEY tingkat tabel dapat didefinisikan pada satu atau beberapa kolom tabel.

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)
);            

Konfigurasikan konstanta literal sebagai nilai default untuk kolom job dan atur nilai default kolom hiredate ke 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 bernama dept di tablespace diskvol1:

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