Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
CREATE TABLE
CREATE TABLEmendefinisikan tabel baru.
Sintaksis yang didukung
CREATE TABLE [ IF NOT EXISTS ] table_name ( [ { column_name data_type [ STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ] [ column_constraint [ ... ] ] | table_constraint | LIKE source_table [ like_option ... ] } [, ... ] ] ) where column_constraint is: [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK ( expression ) | DEFAULT default_expr | GENERATED ALWAYS AS ( generation_expr ) STORED | GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY ( sequence_options ) | UNIQUE [ NULLS [ NOT ] DISTINCT ] index_parameters | PRIMARY KEY index_parameters | REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH SIMPLE ] [ ON DELETE referential_action ] [ ON UPDATE referential_action ] } [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] and table_constraint is: [ CONSTRAINT constraint_name ] { CHECK ( expression ) | UNIQUE [ NULLS [ NOT ] DISTINCT ] ( column_name [, ... ] ) index_parameters | PRIMARY KEY ( column_name [, ... ] ) index_parameters | FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ] [ MATCH FULL | MATCH SIMPLE ] [ ON DELETE referential_action ] [ ON UPDATE referential_action ] } [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] and referential_action in a FOREIGN KEY/REFERENCES constraint is: { NO ACTION | RESTRICT | CASCADE | SET NULL [ ( column_name [, ... ] ) ] | SET DEFAULT [ ( column_name [, ... ] ) ] } and like_option is: { INCLUDING | EXCLUDING } { COMMENTS | CONSTRAINTS | DEFAULTS | GENERATED | IDENTITY | INDEXES | STATISTICS | ALL } index_parameters in UNIQUE and PRIMARY KEY constraints are: [ INCLUDE ( column_name [, ... ] ) ]
Kolom identitas
catatan
Saat menggunakan kolom identitas, nilai cache harus dipertimbangkan dengan cermat. Untuk informasi selengkapnya, lihat penjelasan penting di CREATE SEQUENCE halaman.
Untuk panduan tentang cara terbaik menggunakan kolom identitas berdasarkan pola beban kerja, lihatBekerja dengan urutan dan kolom identitas.
Kla GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY ( usa membuat kolom sebagai kolom identitas. Ini akan memiliki urutan implisit yang melekat padanya dan dalam baris yang baru dimasukkan kolom akan secara otomatis memiliki nilai dari urutan yang ditetapkan untuknya. Kolom seperti itu secara implisitsequence_options )NOT NULL.
Klausa ALWAYS dan BY DEFAULT menentukan bagaimana nilai yang ditentukan pengguna secara eksplisit ditangani dalam INSERT dan UPDATE perintah.
Dalam INSERT perintah, jika ALWAYS dipilih, nilai yang ditentukan pengguna hanya diterima jika INSERT pernyataan tersebut menentukanOVERRIDING SYSTEM
VALUE. Jika BY DEFAULT dipilih, maka nilai yang ditentukan pengguna diutamakan.
Dalam UPDATE perintah, jika ALWAYS dipilih, pembaruan kolom ke nilai apa pun selain DEFAULT akan ditolak. Jika BY
DEFAULT dipilih, kolom dapat diperbarui secara normal. (Tidak ada OVERRIDING klausa untuk UPDATE perintah.)
sequence_optionsKlausa dapat digunakan untuk mengganti parameter urutan. Opsi yang tersedia termasuk yang ditampilkan untukCREATE SEQUENCE, plusSEQUENCE NAME
. TanpanameSEQUENCE NAME, sistem memilih nama yang tidak digunakan untuk urutan.
Mode penyimpanan
Klausa STORAGE opsional menetapkan mode penyimpanan untuk kolom. Gunakan opsi ini untuk mengontrol perilaku kompresi untuk tipe data dengan panjang variabel sepertiJSON,,, JSONB TEXTVARCHAR, dan. BPCHAR
Amazon Aurora DSQL memampatkan beberapa tipe data ketika melebihi ukuran tertentu. Untuk menonaktifkan perilaku ini, gunakan EXTERNAL opsi PLAIN atau.
PLAIN-
Aurora DSQL menyimpan data sebaris tanpa kompresi. Ini adalah satu-satunya pilihan untuk tipe data dengan panjang tetap seperti.
integerGunakan opsi ini untuk menonaktifkan kompresi pada beberapa tipe panjang variabel. MAIN|EXTENDED|DEFAULT-
MAINdanEXTENDEDizinkan kompresi opsional kolom jika tipe data yang mendasarinya mendukung kompresi.DEFAULTmengatur mode penyimpanan ke mode default untuk tipe data kolom. EXTERNAL-
Aurora DSQL saat ini tidak mendukung tabel TOAST, namun
EXTERNALmenonaktifkan kompresi pada tipe data yang mendukung kompresi.
Kendala kunci asing
Kla REFERENCES usa FOREIGN KEY and menentukan batasan kunci asing, yang mengharuskan sekelompok satu atau lebih kolom tabel baru hanya berisi nilai-nilai yang cocok dengan nilai dalam kolom yang direferensikan dari beberapa baris tabel yang direferensikan. Jika Anda menghilangkan refcolumn daftar, Aurora DSQL menggunakan kunci utama dari. reftable Jika tidak, refcolumn daftar harus merujuk ke kolom dari batasan kunci unik atau kunci utama yang tidak dapat ditunda.
Aurora DSQL mencocokkan nilai yang dimasukkan ke dalam kolom referensi terhadap nilai tabel yang direferensikan dan kolom yang direferensikan menggunakan jenis kecocokan yang diberikan. Ada dua jenis kecocokan yang didukung: MATCH FULL dan MATCH SIMPLE (yang merupakan default).
Anda dapat mendefinisikan kunci asing sebagai batasan kolom atau batasan tabel:
-
Batasan kolom (REFERENSI) - Gunakan
REFERENCESsetelah tipe data kolom untuk kunci asing kolom tunggal. -
Kendala tabel (KUNCI ASING) - Gunakan
FOREIGN KEY (...) REFERENCES ...untuk kunci asing kolom tunggal atau multi-kolom.
Tindakan referensial
Saat Anda mengubah data di kolom yang direferensikan, Aurora DSQL melakukan tindakan pada data di kolom tabel referensi. Kla ON DELETE usa menentukan tindakan yang harus dilakukan ketika transaksi menghapus baris yang direferensikan dalam tabel yang direferensikan. Demikian juga, ON UPDATE klausa menentukan tindakan yang harus dilakukan ketika transaksi memperbarui kolom yang direferensikan ke nilai baru. Jika transaksi memperbarui baris tetapi tidak mengubah kolom yang direferensikan, Aurora DSQL tidak mengambil tindakan.
Aurora DSQL mendukung tindakan referensial berikut:
NO ACTION(default)-
Menghasilkan kesalahan jika penghapusan atau pembaruan akan membuat pelanggaran batasan kunci asing. Jika batasan ditangguhkan, Aurora DSQL menghasilkan kesalahan ini pada waktu pemeriksaan kendala jika ada baris referensi yang masih ada. Ini adalah tindakan default.
RESTRICT-
Menghasilkan kesalahan jika baris yang akan dihapus atau diperbarui cocok dengan baris dalam tabel referensi. Ini mencegah tindakan bahkan jika negara setelah tindakan tidak akan melanggar batasan kunci asing. Secara khusus, ini mencegah pembaruan baris yang direferensikan ke nilai yang berbeda tetapi dibandingkan sama. Tidak seperti
NO ACTION,RESTRICTcek tidak dapat ditangguhkan.
Tindakan bertingkat diperhitungkan terhadap batas modifikasi transaksi
T CASCADE ind SET NULL akan,, SET DEFAULT dan secara otomatis mengubah baris dalam tabel referensi saat baris yang direferensikan diperbarui atau dihapus. Batas baris transaksi Aurora DSQL berlaku untuk tindakan ini dan dapat menyebabkan kegagalan tak terduga jika tidak digunakan dengan hati-hati. Lebih suka NO ACTION atau RESTRICT untuk hubungan kunci asing di mana kardinalitas baris anak tidak terbatas atau tidak dapat diprediksi. Untuk informasi selengkapnya, lihat Batas database di Aurora DSQL.
CASCADE-
Hapus setiap baris yang mereferensikan baris yang dihapus, atau perbarui nilai kolom referensi ke nilai baru kolom yang direferensikan, masing-masing.
SET NULL [ ( column_name [, ... ] ) ]-
Atur semua kolom referensi, atau subset tertentu dari kolom referensi, ke null. Subset kolom hanya dapat ditentukan untuk
ON DELETEtindakan. SET DEFAULT [ ( column_name [, ... ] ) ]-
Atur semua kolom referensi, atau subset tertentu dari kolom referensi, ke nilai defaultnya. Subset kolom hanya dapat ditentukan untuk
ON DELETEtindakan. (Harus ada baris dalam tabel yang direferensikan yang cocok dengan nilai default, jika tidak nol, atau operasi akan gagal.)
Jenis pertandingan
Aurora DSQL mendukung jenis kecocokan berikut:
MATCH SIMPLE(default)-
Memungkinkan salah satu kolom kunci asing menjadi nol. Jika salah satu dari mereka nol, baris tidak diperlukan untuk memiliki kecocokan dalam tabel yang direferensikan.
MATCH FULL-
Tidak mengizinkan satu kolom kunci asing multi-kolom menjadi nol kecuali semua kolom kunci asing adalah nol. Jika semuanya nol, baris tidak diperlukan untuk memiliki kecocokan dalam tabel yang direferensikan.
Anda dapat menerapkan NOT NULL batasan ke kolom referensi untuk mencegah kasus ini timbul.
Penundaan
Anda dapat mengontrol kapan kendala kunci asing diperiksa dengan menentukan penundaannya:
NOT DEFERRABLE(default)-
Aurora DSQL memeriksa batasan ini segera setelah setiap pernyataan. Anda tidak dapat mengubahnya menjadi ditangguhkan.
SET CONSTRAINTS DEFERRABLE-
Kendala dapat ditangguhkan hingga akhir transaksi menggunakan.
SET CONSTRAINTSTanpaINITIALLYklausa, ini default keINITIALLY IMMEDIATE. DEFERRABLE INITIALLY IMMEDIATE-
Secara default, Aurora DSQL memeriksa batasan ini setelah setiap pernyataan, tetapi Anda dapat menundanya dalam transaksi dengan menggunakan.
SET CONSTRAINTS ... DEFERRED DEFERRABLE INITIALLY DEFERRED-
Secara default, Aurora DSQL memeriksa batasan ini pada waktu komit transaksi. Anda dapat mengubahnya menjadi langsung dalam transaksi dengan menggunakan
SET CONSTRAINTS ... IMMEDIATE.
Untuk informasi selengkapnya tentang mengubah waktu pemeriksaan kendala dalam transaksi, lihatMENGATUR BATASAN.
Kendala kunci asing saja
Di Aurora DSQL, DEFERRABLE opsi ini hanya berlaku untuk batasan kunci asing.
Contoh kendala kunci asing
Asumsikan Anda memiliki tabel menyimpan produk:
CREATE TABLE products ( product_no integer PRIMARY KEY, name text, price numeric );
Sekarang Anda ingin tabel menyimpan pesanan produk tersebut. Anda ingin memastikan bahwa tabel pesanan berisi referensi ke produk yang benar-benar ada. Tentukan batasan kunci asing dalam tabel pesanan yang mereferensikan tabel produk:
CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer REFERENCES products (product_no), quantity integer );
Sekarang Anda tidak dapat membuat pesanan dengan product_no entri non-null yang tidak muncul di tabel produk.
Dalam situasi ini, tabel pesanan adalah tabel referensi dan tabel produk adalah tabel yang di referensikan. Demikian pula, ada kolom referensi dan referensi.
Anda dapat mempersingkat perintah di atas menjadi:
CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer REFERENCES products, quantity integer );
Jika Anda menghilangkan daftar kolom, Aurora DSQL menggunakan kunci utama dari tabel yang direferensikan sebagai kolom yang direferensikan.
Anda dapat menetapkan nama Anda sendiri untuk batasan kunci asing dengan cara biasa:
CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer CONSTRAINT fk_product REFERENCES products, quantity integer );
Kunci asing juga dapat membatasi dan mereferensikan sekelompok kolom. Kemudian perlu ditulis dalam bentuk kendala tabel:
CREATE TABLE inventory ( warehouse_id integer, product_no integer, quantity integer, PRIMARY KEY (warehouse_id, product_no) ); CREATE TABLE shipments ( shipment_id integer PRIMARY KEY, warehouse_id integer, product_no integer, FOREIGN KEY (warehouse_id, product_no) REFERENCES inventory (warehouse_id, product_no) );
Jumlah dan jenis kolom yang dibatasi harus kompatibel dengan jumlah dan jenis kolom yang direferensikan.
Sebuah tabel dapat memiliki lebih dari satu kendala kunci asing. Ini digunakan untuk mengimplementasikan hubungan banyak-ke-banyak antara tabel:
CREATE TABLE order_items ( product_no integer REFERENCES products, order_id integer REFERENCES orders, quantity integer, PRIMARY KEY (product_no, order_id) );
Kendala kunci asing dapat mereferensikan tabel yang sama dengan yang dimilikinya. Ini disebut kunci asing referensial diri. Misalnya, jika Anda ingin baris tabel mewakili node dari struktur pohon, Anda dapat menulis:
CREATE TABLE tree ( node_id integer PRIMARY KEY, parent_id integer REFERENCES tree, name text );
Node tingkat atas akan memiliki NULLparent_id, sementara parent_id entri non-NULL dibatasi untuk mereferensikan baris tabel yang valid.
Anda dapat menentukan tindakan referensial untuk mengontrol apa yang terjadi ketika baris yang direferensikan dihapus atau diperbarui. Contoh berikut digunakan ON DELETE RESTRICT untuk mencegah penghapusan produk yang masih direferensikan oleh pesanan:
CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer REFERENCES products ON DELETE RESTRICT, quantity integer );
DenganRESTRICT, mencoba menghapus produk yang memiliki pesanan yang mereferensikannya menghasilkan kesalahan segera. Dengan defaultNO ACTION, cek dapat ditangguhkan ke akhir transaksi jika kendala dideklarasikan. DEFERRABLE
Untuk membuat kunci asing yang dapat ditangguhkan hingga akhir transaksi, gunakan DEFERRABLE opsi. Ini berguna ketika Anda perlu memasukkan baris di kedua tabel dalam transaksi yang sama terlepas dari urutannya:
CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer REFERENCES products DEFERRABLE INITIALLY DEFERRED, quantity integer );
DenganDEFERRABLE INITIALLY DEFERRED, batasan tidak diperiksa sampai waktu komit. Anda dapat menyisipkan baris pesanan sebelum baris produk ada, selama baris produk ada saat transaksi dikomit.
Untuk digunakan MATCH FULL dengan kunci asing komposit, yang mengharuskan semua kolom referensi adalah nol bersama-sama atau semua non-null bersama-sama:
CREATE TABLE shipments ( shipment_id integer PRIMARY KEY, warehouse_id integer, product_no integer, FOREIGN KEY (warehouse_id, product_no) REFERENCES inventory (warehouse_id, product_no) MATCH FULL );