Bagikan melalui


klausa ADD CONSTRAINT

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

Menambahkan kunci primer bersifat informasional, kunci asing bersifat informasional, atau batasan pemeriksaan yang diberlakukan ke tabel Delta Lake yang ada, tampilan materialisasi, atau tabel streaming.

Sintaks

ADD [check_constraint | key_constraint ]

check_constraint
    CONSTRAINT name CHECK ( condition ) [ ENFORCED ]

key_constraint
    { [ CONSTRAINT name ]
      {
        PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ] |
        { FOREIGN KEY (foreign_key_column [, ...] )
          REFERENCES parent_relation [ ( parent_column [, ...] ] )
          [ constraint_option | foreign_key_option ] [...]
      }
    }

constraint_option
    { NOT ENFORCED |
      DEFERRABLE |
      INITIALLY DEFERRED |
      { NORELY | RELY } }

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

  • check_constraint

    Menentukan batasan pemeriksaan untuk relasi.

    • CONSTRAINT nama

      Menentukan nama untuk batasan. Nama harus unik dalam hubungan.

    • CHECK ( kondisi)

      Hubungan DEFAULT COLLATION harus dalam keadaan UTF8_BINARY pada saat batasan ditambahkan.

      condition harus berupa ekspresi deterministik yang mengembalikan BOOLEAN.

      condition dapat terdiri dari literal, pengidentifikasi kolom dalam hubungan, dan deterministik, fungsi atau operator SQL bawaan kecuali:

      Juga condition tidak boleh berisi subkueri apa pun.

      Agar batasan CHECK terpenuhi di Azure Databricks, batasan harus dievaluasi ke true.

      Delta Lake memverifikasi validitas batasan pemeriksaan terhadap data baru dan yang sudah ada. Jika ada baris yang melanggar batasan, akan muncul kesalahan.

  • key_constraint

    Penting

    Fitur ini ada di Pratinjau Publik.

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

    Menentukan kunci primer informasi atau batasan kunci asing informasional untuk relasi. Batasan kunci informasi tidak diberlakukan tetapi dapat meningkatkan performa dengan mendukung pengoptimalan kueri .

    • 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:centang ya hanya untuk Katalog Unity

      Menambahkan batasan kunci utama ke relasi. Hubungan dapat memiliki paling banyak satu kunci primer.

      Batasan kunci primer tidak didukung untuk hubungan dalam hive_metastore katalog.

    • key_column

      Kolom hubungan subjek yang didefinisikan sebagai NOT NULL. Nama kolom tidak boleh diulang.

    • TIMESERIES

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

      Secara opsional, menandai komponen kolom kunci utama sebagai mewakili seri waktu.

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

      Berlaku untuk:centang ya hanya untuk Katalog Unity

      Menambahkan batasan kunci asing (integritas referensial) ke relasi.

      Batasan kunci asing tidak didukung untuk hubungan dalam katalog hive_metastore.

      • kolom_kunci_tamu

        Kolom hubungan subjek. Nama kolom tidak boleh diulang. Jenis data setiap kolom harus cocok dengan jenis parent_columnyang cocok. Jumlah kolom harus cocok dengan jumlah parent_columns. Dua kunci asing tidak dapat berbagi sekumpulan kolom kunci asing yang identik.

      • parent_relation

        Menentukan hubungan yang dirujuk oleh kunci asing. Hubungan harus memiliki batasan yang ditentukan PRIMARY KEY , dan Anda harus memiliki SELECT hak istimewa pada hubungan tersebut.

      • parent_column

        Kolom dalam relasi induk yang merupakan bagian dari kunci utamanya. Semua kolom kunci utama relasi induk harus dicantumkan.

        Jika kolom induk tidak tercantum, kolom tersebut tersirat untuk ditentukan dalam urutan yang diberikan dalam definisi PRIMARY KEY.

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

    • constraint_option

      Mencantumkan properti kendala. Semua properti bersifat opsional tetapi tersirat secara default. Setiap properti hanya dapat ditentukan satu kali.

      • NOT ENFORCED

        Azure Databricks tidak mengambil tindakan untuk memberlakukannya untuk baris yang sudah ada atau baru.

      • DEFERRABLE

        Penegakan batasan dapat ditangguhkan.

      • INITIALLY DEFERRED

        Pemberlakuan pembatasan 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:bertanda centang ya Databricks SQL bertanda centang ya Databricks Runtime 15.4 ke atas untuk batasan FOREIGN KEY

        Jika RELY, Azure Databricks dapat mengeksploitasi batasan untuk menulis ulang kueri. Adalah tanggung jawab pengguna untuk memastikan batasan terpenuhi. Mengandalkan batasan yang tidak terpenuhi dapat menyebabkan hasil kueri yang salah.

        Default adalah NORELY.

    • foreign_key_option

      Mencantumkan properti yang spesifik untuk batasan kunci asing. Semua properti bersifat opsional tetapi tersirat secara default. Setiap properti hanya dapat ditentukan satu kali.

      • 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

-- Add a primary key
> CREATE TABLE persons(first_name STRING NOT NULL, last_name STRING NOT NULL, nickname STRING);
> ALTER TABLE persons ADD CONSTRAINT persons_pk PRIMARY KEY(first_name, last_name);

-- Add a foreign key which Databricks does not enforce, but can rely upon.
> CREATE TABLE pets(name STRING, owner_first_name STRING, owner_last_name STRING);
> ALTER TABLE pets ADD CONSTRAINT pets_persons_fk
    FOREIGN KEY(owner_first_name, owner_last_name) REFERENCES persons
    NOT ENFORCED RELY;

-- Add a check contraint
> ALTER TABLE pets ADD CONSTRAINT pets_name_not_cute_chk CHECK (length(name) < 20);