Bagikan melalui


klausa CONSTRAINT

Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime

Menambahkan kunci primer informasional atau kunci asing informasional 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

Gunakan klausa table_constraint 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 ] [...]
       }
     }
   }

Gunakan klausa column_constraintuntuk 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 |
      { RELY | 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

  • CONSTRAINT nama

    Secara opsional menentukan nama untuk batasan. Nama harus unik dalam skema. Jika tidak ada nama yang disediakan, Azure Databricks akan menghasilkannya.

  • PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [constraint_option [...] ]

    Berlaku untuk:dicentang ya Databricks SQL dicentang ya Databricks Runtime 11.3 LTS dan yang lebih baru dicentang ya hanya Unity Catalog

    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 utama tidak didukung untuk tabel di katalog hive_metastore.

    • key_column

      Kolom tabel subjek atau tampilan materialisasi. Nama kolom tidak boleh diulang.

    • TIMESERIES

      Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime 13.3 LTS ke atas

      Komponen kolom kunci utama dapat dilabeli sebagai mewakili deret waktu secara opsional.

  • PRIMARY KEY [ constraint_option ] [...]

    Menambahkan batasan kunci utama kolom tunggal ke tabel atau tampilan materialisasi, menggunakan definisi kolom kunci sebelumnya.

    Ini column_constraint setara dengan table_constraint

    PRIMARY KEY (key_column) [ constraint_option ] [...]

  • FOREIGN KEY (foreign_key_column [, ...] ) REFERENCES parent_table [ ( parent_column [, ...] ) ] foreign_key_option

    Berlaku untuk:dicentang ya Databricks SQL dicentang ya Databricks Runtime 11.3 LTS dan yang lebih baru dicentang ya hanya Unity Catalog

    Menambahkan batasan kunci asing informasional (integritas referensial) ke tabel atau tampilan materialisasi.

    Batasan kunci asing tidak didukung untuk tabel dalam katalog hive_metastore.

    Batasan kunci asing yang hanya berbeda dalam permutasi kolom kunci asing tidak diizinkan.

    • kolom_kunci_tamu

      Kolom tabel subjek atau tampilan materialisasi. Nama kolom tidak boleh diulang. Jenis data setiap kolom harus cocok dengan jenis parent_columnyang cocok. Jumlah kolom harus sesuai dengan jumlah parent_columnyang ada. Dua kunci asing tidak dapat berbagi sekumpulan kolom kunci asing yang identik.

    • parent_table

      Menunjukkan tabel atau tampilan materialisasi yang dirujuk oleh kunci asing. Tabel harus memiliki batasan PRIMARY KEY yang ditentukan, dan Anda harus memiliki hak istimewa SELECT pada tabel.

    • parent_column

      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 definisi PRIMARY KEY.

    • 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 dengan table_constraint

      FOREIGN KEY ( foreign_key_column ) REFERENCES parent_table [ ( parent_column ) ] foreign_key_option

  • opsi_kendala

    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

      Penegakan pengekangan ditangguhkan.

    • NORELY atau RELY

      Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime 14.2 ke atas untuk PRIMARY KEY batasan

      Berlaku untuk:ditandai benar Databricks SQL ditandai benar Databricks Runtime 15.4 ke atas untuk pembatasan FOREIGN KEY

      Jika RELY, Azure Databricks dapat mengeksploitasi batasan untuk menulis ulang dan mengoptimalkan kueri. Adalah tanggung jawab pengguna untuk memastikan batasan terpenuhi. Mengandalkan batasan yang tidak terpenuhi dapat menyebabkan hasil kueri yang salah. Optimasi kueri yang terkait dengan perintah RELY mengharuskan kueri dijalankan pada sistem komputasi yang didukung Photon. Lihat Apa itu Photon?.

      Default adalah NORELY.

  • 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 PRIMARY KEY induk 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);