Klausa BATASAN
Berlaku untuk: Databricks SQL Databricks Runtime
Penting
Fitur ini ada di Pratinjau Publik.
Menambahkan kunci primer informasi atau kunci asing informasi sebagai bagian dari pernyataan CREATE TABLE atau CREATE MATERIALIZED VIEW .
Untuk menambahkan batasan pemeriksaan ke tabel Delta Lake, gunakan ALTER TABLE setelah tabel dibuat.
Sintaks
table_constraint
Gunakan klausa untuk menentukan batasan yang mencakup beberapa kolom atau untuk memisahkan sintaks dari definisi kolom.
table_constraint
{ [ CONSTRAINT name ]
{ PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ] |
{ FOREIGN KEY ( foreign_key_column [, ...] )
REFERENCES parent_table [ ( parent_column [, ...] ) ]
[ foreign_key_option | constraint_option ] [...]
}
}
}
column_constraint
Gunakan klausa untuk menentukan batasan khusus untuk definisi kolom tunggal.
column_constraint
{ [ CONSTRAINT name ]
{ PRIMARY KEY [ constraint_option ] [...] |
{ [ FOREIGN KEY ]
REFERENCES parent_table [ ( parent_column [, ...] ) ]
[ foreign_key_option | constraint_option ] [...]
}
}
}
constraint_option
{ NOT ENFORCED |
DEFERRABLE |
INITIALLY DEFERRED |
NORELY }
foreign_key_option
{ MATCH FULL |
ON UPDATE NO ACTION |
ON DELETE NO ACTION }
Untuk kompatibilitas dengan dialek SQL non-standar, Anda dapat menentukan ENABLE NOVALIDATE
alih-alih NOT ENFORCED DEFERRABLE INITIALLY DEFERRED
.
Parameter
-
Secara opsional menentukan nama untuk batasan. Nama harus unik dalam skema. Jika tidak ada nama yang disediakan, Azure Databricks akan menghasilkannya.
KUNCI PRIMER ( key_column [ TIMESERIES ] [, ...] ) [constraint_option [...] ]
Berlaku untuk: Databricks SQL Databricks Runtime 11.3 LTS dan di atas Unity Catalog saja
Menambahkan batasan kunci primer informasi ke tabel atau tampilan materialisasi. Tabel atau tampilan materialisasi dapat memiliki paling banyak satu kunci utama.
Kolom kunci utama secara implisit didefinisikan sebagai
NOT NULL
.Batasan kunci primer tidak didukung untuk tabel dalam
hive_metastore
katalog.-
Kolom tabel subjek atau tampilan materialisasi. Nama kolom tidak boleh diulang.
TIMESERIES
Berlaku untuk: Databricks SQL Databricks Runtime 13.3 LTS ke atas
Secara opsional melabeli komponen kolom kunci utama sebagai mewakili timeseries.
-
PRIMARY KEY [ constraint_option ] [...]
Menambahkan batasan kunci utama kolom tunggal ke tabel atau tampilan materialisasi, menggunakan definisi kolom kunci sebelumnya.
Ini
column_constraint
setara dengantable_constraint
PRIMARY KEY (key_column) [ constraint_option ] [...]
FOREIGN KEY (foreign_key_column [, ...] ) REFERENCES parent_table [ ( parent_column [, ...] ) ] foreign_key_option
Berlaku untuk: Databricks SQL Databricks Runtime 11.3 LTS dan di atas Unity Catalog saja
Menambahkan batasan kunci asing informasional (integritas referensial) ke tabel atau tampilan materialisasi.
Batasan kunci asing tidak didukung untuk tabel dalam
hive_metastore
katalog.Batasan kunci asing yang hanya berbeda dalam permutasi kolom kunci asing tidak diizinkan.
-
Kolom tabel subjek atau tampilan materialisasi. Nama kolom tidak boleh diulang. Jenis data setiap kolom harus cocok dengan jenis pencocokan
parent_column
. Jumlah kolom harus cocok dengan jumlahparent_column
kolom. Dua kunci asing tidak dapat berbagi sekumpulan kolom kunci asing yang identik. -
Menentukan tabel atau tampilan materialisasi yang dirujuk oleh kunci asing. Tabel harus memiliki batasan yang ditentukan
PRIMARY KEY
, dan Anda harus memiliki tabel atau tampilan materialisasi tersebut. -
Kolom dalam tabel induk atau tampilan materialisasi yang merupakan bagian dari kunci utamanya. Semua kolom kunci utama tabel induk atau tampilan materialisasi harus dicantumkan.
Jika kolom induk tidak tercantum, kolom tersebut ditentukan oleh urutan yang diberikan dalam
PRIMARY KEY
definisi. FOREIGN KEY REFERENCES parent_table [ ( parent_column ) ] foreign_key_option
Menambahkan batasan kunci asing kolom tunggal ke tabel atau tampilan materialisasi, menggunakan definisi kolom kunci asing sebelumnya.
Ini
column_constraint
setara dengantable_constraint
FOREIGN KEY ( foreign_key_column ) REFERENCES parent_table [ ( parent_column ) ] foreign_key_option
-
constraint_option
Mencantumkan properti batasan. Semua properti bersifat opsional tetapi tersirat secara default. Setiap properti paling banyak dapat ditentukan sekali.
NOT ENFORCED
Azure Databricks tidak mengambil tindakan untuk memberlakukannya untuk baris yang sudah ada atau baru.
DEFERRABLE
Penegakan batasan dapat ditangguhkan.
INITIALLY DEFERRED
Pemberlakuan batasan ditangguhkan.
NORELY
Azure Databricks tidak mengeksploitasi batasan untuk menulis ulang kueri.
foreign_key_option
Mencantumkan properti khusus untuk batasan kunci asing. Semua properti bersifat opsional tetapi tersirat secara default. Setiap properti paling banyak dapat ditentukan sekali.
MATCH FULL
Agar batasan dianggap benar semua nilai kolom harus
NOT NULL
.ON UPDATE NO ACTION
Jika induk
PRIMARY KEY
diperbarui, Azure Databricks tidak mengambil tindakan untuk membatasi pembaruan atau memperbarui kunci asing.ON DELETE NO ACTION
Jika baris induk dihapus, Azure Databricks tidak mengambil tindakan untuk membatasi tindakan, memperbarui kunci asing, atau menghapus baris dependen.
Penting
Azure Databricks tidak memberlakukan batasan kunci primer atau kunci asing. Konfirmasi batasan kunci sebelum menambahkan kunci primer atau asing. Proses penyerapan Anda dapat memberikan jaminan tersebut, atau Anda dapat menjalankan pemeriksaan terhadap data Anda.
Contoh
-- Create a table with a primary key
> CREATE TABLE persons(first_name STRING NOT NULL, last_name STRING NOT NULL, nickname STRING,
CONSTRAINT persons_pk PRIMARY KEY(first_name, last_name));
-- create a table with a foreign key
> CREATE TABLE pets(name STRING, owner_first_name STRING, owner_last_name STRING,
CONSTRAINT pets_persons_fk FOREIGN KEY (owner_first_name, owner_last_name) REFERENCES persons);
-- Create a table with a single column primary key and system generated name
> CREATE TABLE customers(customerid STRING NOT NULL PRIMARY KEY, name STRING);
-- Create a table with a names single column primary key and a named single column foreign key
> CREATE TABLE orders(orderid BIGINT NOT NULL CONSTRAINT orders_pk PRIMARY KEY,
customerid STRING CONSTRAINT orders_customers_fk REFERENCES customers);