Klausul CONSTRAINT

batasan serupa dengan indeks, meskipun dapat pula digunakan untuk menetapkan hubungan dengan tabel lain.

Anda menggunakan klausul CONSTRAINT dalam pernyataan ALTER TABLE dan CREATE TABLE untuk membuat atau menghapus batasan. Terdapat dua jenis klausul CONSTRAINT: klausul pertama untuk membuat batasan pada satu bidang dan klausul kedua untuk membuat batasan di lebih dari satu bidang.

Catatan: Mesin database Microsoft Access tidak mendukung penggunaan CONSTRAINT, atau pernyataan bahasa definisi data apa pun, dengan database selain Microsoft Access. Gunakan metode Pembuatan DAO sebagai gantinya.

Sintaks

Batasan satu bidang:

CONSTRAINT nama {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES tabelasing [(tabelasing1, tabelasing2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Batasan beberapa bidang:

CONSTRAINT nama
{PRIMARY KEY (primer1[, primer2 [, ...]]) |
UNIQUE (unik1[, unik2 [, ...]]) |
NOT NULL (bukannull1[, bukannullll2 [, ...]]) |
FOREIGN KEY [NO INDEX] (ref1[, ref2 [, ...]]) REFERENCES tabelasing [(tabelasing1 [, tabelasing2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Klausul CONSTRAINT memiliki bagian-bagian ini:

Bagian

Deskripsi

nama

Nama batasan yang akan dibuat.

primer1, primer2

Nama bidang yang akan ditentukan kunci utama.

unik1, unik2

Nama bidang yang ditentukan sebagai kunci unik.

bukannull1, bukannull2

Nama bidang yang terbatas untuk nilai selain Null.

ref1, ref2

Nama bidang kunci asing yang merujuk ke bidang di tabel lain.

tabelasing

Nama tabel asing yang berisi bidang yang ditentukan oleh bidangasing.

bidangasing1, bidangasing2

Nama bidang dalam tabelasing yang ditentukan oleh ref1, ref2. Anda dapat menghilangkan klausul ini jika bidang yang direferensikan adalah kunci primer dari tabelasing.


Keterangan

Anda menggunakan sintaks untuk batasan satu bidang di klausul definisi bidang dari pernyataan ALTER TABLE atau CREATE TABLE setelah spesifikasi tipe data bidang.

Anda menggunakan sintaks untuk batasan beberapa bidang setiap kali menggunakan CONSTRAINT kata khusus di luar klausul definisi bidang dalam pernyataan ALTER TABLE atau CREATE TABLE.

Menggunakan CONSTRAINT, Anda dapat menentukan bidang sebagai salah satu tipe batasan berikut:

  • Anda dapat menggunakan kata khusus UNIQUE untuk menentukan bidang sebagai kunci unik. Artinya, tidak ada dua data dalam tabel yang memiliki nilai sama di bidang ini. Anda dapat membatasi bidang atau daftar sebagai bidang atau daftar unik. Jika batasan beberapa bidang ditetapkan sebagai kunci unik, nilai gabungan dari semua bidang di indeks harus unik, meskipun dua atau lebih data memiliki nilai sama di salah satu bidang.

  • Anda dapat menggunakan kata khusus PRIMARY KEY untuk menentukan satu bidang atau kumpulan bidang dalam tabel sebagai kunci primer. Semua nilai dalam kunci primer harus unik dan tidak Null, dan hanya diperbolehkan satu kunci primer saja untuk satu tabel.

    Catatan: Jangan tetapkan batasan PRIMARY KEY di tabel yang telah memiliki kunci primer. Jika Anda melakukannya, kesalahan akan terjadi.

  • Anda dapat menggunakan kata khusus FOREIGN KEY untuk menentukan bidang sebagai kunci asing. Jika kunci primer tabel asing terdiri dari lebih dari satu bidang, Anda harus menggunakan definisi batasan beberapa bidang, yang mencantumkan semua bidang yang mereferensikan, nama tabel asing, dan nama bidang yang direferensikan di tabel asing dalam urutan yang sama seperti urutan bidang yang mereferensikan. Jika bidang yang direferensikan adalah kunci primer tabel asing, Anda tidak perlu menentukan bidang yang direferensikan. Secara default, mesin database bertindak seolah-olah kunci primer tabel asing adalah bidang yang direferensikan.

    Batasan kunci asing menentukan tindakan tertentu yang akan dijalankan saat nilai kunci primer yang terkait diubah:

  • Anda dapat menentukan tindakan yang akan dijalankan pada tabel asing berdasarkan tindakan terkait yang dijalankan di kunci primer dalam tabel tempat CONSTRAINT ditentukan. Misalnya, pertimbangkan definisi tabel Pelanggan berikut:

CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

Pertimbangkan definisi tabel Pesanan berikut, yang menentukan hubungan kunci asing yang mereferensikan kunci primer dari tabel Pelanggan:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE

Klausul ON UPDATE CASCADE dan ON DELETE CASCADE ditentukan di kunci asing. Klausul ON UPDATE CASCADE berarti jika pengidentifikasi pelanggan (IdPlgn) telah diperbarui di tabel Pelanggan, pembaruan akan diteruskan melalui tabel Pesanan. Setiap pesanan yang berisi nilai pengidentifikasi pelanggan yang terkait akan diperbarui secara otomatis beserta dengan nilai baru. Klausul ON DELETE CASCADE berarti bahwa jika pelanggan telah dihapus dari tabel Pelanggan, semua baris di tabel Pesanan yang berisi nilai pengidentifikasi pelanggan yang sama juga akan dihapus.

Pertimbangkan definisi tabel Pesanan berbeda berikut, yang menggunakan tindakan SET NULL sebagai ganti tindakan CASCADE:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE SET NULL ON DELETE SET NULL

Klausul ON UPDATE SET NULL berarti bahwa jika pengidentifikasi pelanggan (IdPlgn) telah diperbarui di tabel Pelanggan, nilai kunci asing yang terkait di tabel Pesanan akan diatur secara otomatis menjadi NULL. Hampir serupa, klausul ON DELETE SET NULL berarti bahwa jika pelanggan telah dihapus dari tabel Pelanggan, semua kunci asing yang terkait dalam tabel Pesanan akan diatur secara otomatis menjadi NULL.

Pemodifikasi NO INDEX dapat digunakan untuk mencegah pembuatan indeks otomatis untuk kunci asing Bentuk definisi kunci asing ini hanya digunakan pada saat nilai indeks hasil sering diduplikasi. Jika nilai dalam indeks kunci asing sering diduplikasi, menggunakan indeks akan menjadi kurang efisien daripada menjalankan pemindaian tabel. Mengelola tipe indeks ini, dengan baris yang disisipkan dan dihapus dari tabel, dapat menurunkan kinerja dan tidak memberikan manfaat apa pun.



Kembangkan keterampilan Anda
Jelajahi pelatihan
Dapatkan fitur baru terlebih dahulu
Gabung ke Office Insiders

Apakah informasi ini bermanfaat?

Terima kasih atas umpan balik Anda!

Terima kasih atas umpan balik Anda! Sepertinya menghubungkan Anda ke salah satu agen dukungan Office kami akan sangat membantu.

×