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
| Parameter | Deskripsi |
|---|---|
GLOBAL TEMPORARY | Membuat 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_name | Nama tabel. Gunakan nama yang mencakup skema untuk merujuk tabel bila diperlukan. |
column_name | Nama kolom dalam tabel. |
data_type | Tipe data kolom. Nilainya dapat mencakup spesifikasi array. |
DEFAULT default_expr | Ekspresi 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_name | Nama opsional untuk constraint kolom atau tabel. Jika dihilangkan, sistem akan menghasilkan nama secara otomatis. |
NOT NULL | Mencegah 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 action | Aksi 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 DEFERRABLE | Apakah 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 DEFERRED | Kapan 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 COMMIT | Aksi 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 tablespace | Tablespace 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 TABLEjuga 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
UNIQUEdanPRIMARY 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 adalahPRESERVE ROWS. Pada Oracle, default-nya adalahDELETE 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.