Membuat kunci utama. Kendala PRIMARY KEY Sintaks kunci primer

Pada artikel ini kami akan mencoba mempertimbangkan segala sesuatu yang berhubungan dengan kunci SQL: untuk apa pembuatan dan pembatasan kunci? Secara umum: akan membosankan 😉

Rencana hari ini adalah:

Dalam teori basis data relasional - kunci Ini adalah entitas tertentu yang dibuat untuk menetapkan batasan tertentu yang menjaga integritas dan ketersediaan data dalam tabel database.

Dengan kata sederhana, kuncinya ada di dalam sql dibuat untuk menunjukkan fungsionalitas tambahan untuk kolom. Baik itu keunikan atau fakta bahwa kolom tersebut mereferensikan tabel lain (kunci asing).

Kunci utama

Kolom yang harus unik dalam database ditandai dengan kunci utama. Kunci utama atau primary key artinya nilai kolom kunci utama tidak dapat diulangi dalam tabel. Dengan demikian, kunci ini memungkinkan Anda mengidentifikasi catatan dalam tabel secara unik tanpa takut nilai kolom akan terulang. Sebagai contoh saja: katakanlah Anda memiliki tabel pengguna. Tabel ini berisi kolom: nama lengkap, tahun lahir, telepon. Bagaimana cara mengidentifikasi pengguna? Parameter seperti nama lengkap dan nomor telepon tidak dapat dipercaya. Bagaimanapun, kita dapat memiliki beberapa pengguna tidak hanya dengan nama belakang yang sama, tetapi juga dengan nama depan yang sama. Nomor telepon dapat berubah seiring waktu dan pengguna yang memiliki nomor telepon tersebut mungkin bukan pengguna yang ada di database kami.

Inilah sebabnya mengapa kunci utama diciptakan. Setelah diberi pengidentifikasi unik dan hanya itu. DI DALAM mySql pada contoh yang kami lakukan semua contoh dari lapangan AUTO_INCREMENT tidak dapat disetel kecuali Anda menunjukkan bahwa ini adalah kunci utama.

Saya rasa tidak ada gunanya menyebutkan bahwa bidang yang ditandai sebagai kunci utama tidak boleh kosong saat membuat catatan.

Kunci asing ( kunci asing)

ada lagi kunci asing (kunci asing). Ini juga disebut referensi. Diperlukan untuk menghubungkan tabel bersama-sama.

Jika dilihat pada gambar di atas, Foreign Key akan menjadi field Supplier pada tabel Shoes. Biasanya, saat membuat tabel, Anda menentukan kolom nilai integer unik. Bagaimana kami melakukannya saat kami membuat tabel pemasok

Kolom pemasok_id akan unik untuk setiap entri. Nilainya akan muncul di kolom pemasok di meja sepatu. Saya sarankan segera melihat contoh bagaimana kunci asing dibuat.

Membuat kunci asing

buat sepatu tabel (shoes_id int auto_increment kunci utama, teks judul, ukuran int, harga mengambang, hitungan int, ketik varchar(30), pemasok int, kunci asing (pemasok) referensi pemasok (pemasok_id));

Seperti yang Anda lihat pada contoh di atas, sintaks untuk membuat kunci asing cukup sederhana. Anda perlu menambahkan bidang ke tabel, lalu mendeklarasikan bidang ini sebagai kunci asing dan menunjukkan ke mana bidang tersebut akan dirujuk. Dalam hal ini lapangan pemasok akan merujuk ke lapangan pemasok_id di meja pemasok

Kunci komposit (kunci komposit)

Sedangkan untuk kunci komposit, ini adalah beberapa kunci utama dalam sebuah tabel. Jadi, setelah menciptakan kunci komposit, keunikan record akan diperiksa oleh field yang digabungkan ke dalam kunci ini.

Ada situasi ketika, saat memasukkan ke dalam tabel, Anda perlu memeriksa keunikan catatan menggunakan beberapa bidang sekaligus. Inilah sebabnya mengapa kunci komposit diciptakan. Misalnya, saya akan membuat tabel sederhana dengan kunci komposit untuk menampilkan sintaks:

Buat pengujian tabel (field_1 int, teks field_2, field_3 bigint, kunci utama (field_1, field_3));

Pada contoh di atas, dua bidang digabungkan menjadi kunci komposit dan tidak akan ada catatan dalam tabel dengan bidang yang identik tersebut.

Itu semua tentang kuncinya SQL. Tutorial kecil ini merupakan persiapan artikel dimana kita akan melihat secara detail bagaimana menggabungkan tabel sehingga membentuk satu database.

BERLAKU UNTUK: SQL Server (sejak 2016)Azure SQL DatabaseAzure SQL Data WarehouseParallel Data Warehouse

Anda dapat menentukan kunci utama di SQL Server 2016 dengan menggunakan SQL Server Management Studio atau Transact-SQL. Membuat kunci utama secara otomatis membuat indeks berkerumun atau tidak berkerumun unik yang sesuai.

Di bagian ini

    Sebelum memulai, selesaikan langkah-langkah berikut.

    Pembatasan

    Keamanan

    Buat kunci utama menggunakan:

    Studio Manajemen SQL Server

Pembatasan

    Sebuah tabel hanya dapat memiliki satu batasan kunci utama.

    Semua kolom dengan batasan PRIMARY KEY harus NOT NULL. Jika nullability tidak ditentukan, maka flag NOT NULL disetel untuk semua kolom dengan batasan PRIMARY KEY.

Keamanan

Izin

Membuat tabel baru dengan kunci utama memerlukan izin CREATE TABLE pada database dan izin ALTER pada skema tempat tabel dibuat.

Membuat kunci utama pada tabel yang sudah ada memerlukan izin ALTER pada tabel.

Membuat Kunci Utama

    Di Object Explorer, klik kanan tabel yang ingin Anda tambahkan batasan uniknya dan pilih Konstruktor.

    DI DALAM Perancang meja Klik pemilih baris untuk kolom database yang ingin Anda tetapkan sebagai kunci utama. Untuk memilih beberapa kolom, tekan dan tahan tombol CTRL dan klik pemilih baris untuk kolom yang tersisa.

    Klik kanan Pemilih Baris Kolom dan pilih Tetapkan kunci utama.

Kolom sumber kunci diidentifikasi dengan simbol kunci utama pada pemilih baris yang sesuai.

Jika kunci utama terdiri lebih dari satu kolom, maka mungkin terdapat nilai duplikat dalam satu kolom, namun semua kombinasi nilai dari semua kolom kunci utama harus unik.

Saat Anda menentukan kunci komposit, urutan kolom di kunci utama sama dengan urutan kolom yang diperlihatkan dalam tabel. Namun, setelah kunci utama dibuat, urutan kolom dapat diubah. Untuk informasi lebih lanjut, lihat .

Buat kunci utama pada tabel yang sudah ada

    DI DALAM Penjelajah Objek

    Buat permintaan.

    Menjalankan. Contoh ini membuat kunci utama pada kolom TransactionID.

    GUNAKAN AdventureWorks2012; PERGI ALTER TABLE Production.TransactionHistoryArchive TAMBAHKAN KONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID); PERGI

Buat kunci utama di tabel baru

    DI DALAM Penjelajah Objek Hubungkan ke instance Mesin Database.

    Pada panel standar, pilih Buat permintaan.

    Salin contoh berikut ke jendela kueri dan klik tombol Menjalankan. Contoh ini membuat tabel dan menentukan kunci utama untuk kolom ID Transaksi.

    GUNAKAN AdventureWorks2012; PERGI CREATE TABLE Production.TransactionHistoryArchive1 (TransactionID int NOT NULL , CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID)); PERGI

    Untuk informasi lebih lanjut, lihat bagian , dan .

Saya mempersembahkan kepada Anda terjemahan gratis artikel SQL untuk Pemula Bagian 2

Penting bagi setiap pengembang web untuk dapat berinteraksi dengan database. Di bagian kedua kami terus belajar bahasa SQL dan menerapkan keterampilan kami pada DBMS MySQL. Kita akan menjelajahi indeks, tipe data, dan kueri yang lebih kompleks.

Apa yang kamu butuhkan

Silakan merujuk ke bagian "Apa yang Anda butuhkan" pada bagian pertama, yang terletak.

Jika Anda ingin menjalankan contoh ini di server Anda, lakukan hal berikut:

  1. Buka konsol Anda MySQL dan masuk.
  2. Buat database "my_first_db" menggunakan kueri MEMBUAT, jika belum pernah dibuat sebelumnya.
  3. Ubah basis menggunakan operator MENGGUNAKAN.

Indeks

Indeks (atau kunci) biasanya digunakan untuk meningkatkan kecepatan eksekusi pernyataan yang memilih data (seperti MEMILIH) dari tabel.

Mereka adalah bagian penting dari arsitektur database yang baik; sulit untuk mengklasifikasikannya sebagai "optimasi". Biasanya indeks ditambahkan pada awalnya, namun dapat ditambahkan kemudian menggunakan kueri MENGUBAH TABEL.

Alasan utama untuk mengindeks kolom database adalah:

  • Hampir setiap tabel memiliki kunci utama ( KUNCI UTAMA), biasanya ini adalah kolom "id".
  • Jika kolom dimaksudkan untuk menyimpan nilai unik, kolom tersebut harus memiliki indeks unik ( UNIK).
  • Jika Anda perlu sering mencari di kolom (menggunakannya dalam kalimat DI MANA), itu harus memiliki indeks reguler ( INDEKS).
  • Jika sebuah kolom digunakan untuk berhubungan dengan tabel lain, kolom tersebut harus berupa kunci asing jika memungkinkan ( KUNCI ASING) atau indeks reguler.

Kunci utama (Kunci UTAMA)

Hampir semua tabel memiliki kunci utama, biasanya bilangan bulat dengan opsi kenaikan otomatis ( AUTO_INCREMET).

Subkueri sering kali menyebabkan penurunan kinerja yang signifikan, jadi gunakanlah dengan hati-hati.

UNION: Menggabungkan data

Menggunakan kueri SERIKAT, Anda dapat menggabungkan hasil beberapa kueri SELECT.

Contoh ini menggabungkan negara bagian yang dimulai dengan huruf "N" dengan negara bagian dengan populasi lebih besar:

(PILIH * DARI negara bagian WHERE nama SEPERTI "n%") UNION (PILIH * DARI negara bagian WHERE populasi > 10000000);

Harap dicatat bahwa New York adalah negara bagian yang besar dan dimulai dengan huruf "N". Namun, ini hanya muncul sekali dalam daftar, karena duplikat dihapus secara otomatis.

Juga keindahan permintaan SERIKAT adalah bahwa mereka dapat digunakan untuk menggabungkan kueri terhadap tabel yang berbeda.

Misalnya, kami memiliki tabel karyawan (karyawan), manajer (manajer) dan pelanggan (klien). Setiap tabel memiliki bidang dengan alamat email. Jika kita ingin mendapatkan semua alamat email dalam satu permintaan, kita bisa melakukan hal berikut:

(PILIH email DARI karyawan) UNION (PILIH email DARI manajer) UNION (PILIH email DARI pelanggan WHERE berlangganan = 1);

Dengan menyelesaikan permintaan ini, kami akan menerima alamat surat semua karyawan dan manajer, dan hanya klien yang berlangganan milis.

MASUKKAN Lanjutan

Kami sudah membicarakan permintaan tersebut MENYISIPKAN di artikel sebelumnya. Sekarang setelah kita melihat indeks, kita dapat membicarakan tentang kemampuan kueri tambahan MENYISIPKAN.

MASUKKAN... PADA PEMBARUAN KUNCI DUPLIKAT

Ini adalah kondisi yang paling umum digunakan. Pertama, permintaan tersebut mencoba dijalankan MENYISIPKAN, dan jika permintaan gagal karena duplikat primer ( KUNCI UTAMA) atau unik ( KUNCI UNIK) kunci, lalu permintaan dijalankan MEMPERBARUI.

Mari kita buat tabel pengujian terlebih dahulu.

Ini adalah meja penyimpanan makanan. Bidang "stok" menyimpan jumlah produk yang tersedia dalam stok.

Sekarang mari kita coba memasukkan nilai yang ada ke dalam tabel dan lihat apa yang terjadi.

Kami menerima kesalahan.

Misalkan kita mempunyai toko roti baru dan ingin mengupdate databasenya, tapi kita tidak tahu apakah sudah ada entri di databasenya. Pertama-tama kita dapat memeriksa keberadaan rekaman tersebut dan kemudian menjalankan kueri penyisipan lainnya. Atau Anda dapat melakukan semuanya dalam satu permintaan sederhana:

Bekerja sama seperti MENYISIPKAN, tetapi dengan satu fitur penting. Jika rekaman sudah ada, rekaman tersebut akan dihapus dan kemudian kueri dijalankan MENYISIPKAN, dan kami tidak akan menerima pesan kesalahan apa pun.

Harap dicatat, karena baris yang benar-benar baru disisipkan, bidang kenaikan otomatis bertambah satu.

Ini adalah cara untuk mencegah terjadinya kesalahan duplikasi agar aplikasi tetap berjalan. Anda mungkin perlu menyisipkan baris baru tanpa mencetak kesalahan apa pun, meskipun ada duplikasi.

Tidak ada kesalahan atau baris yang diperbarui.

Tipe Data

Setiap kolom dalam tabel harus bertipe spesifik. Kami telah menggunakan tipe INTI, VARCHAR Dan TANGGAL, tapi tidak membahasnya secara detail. Kita juga akan melihat beberapa tipe data lainnya.

Mari kita mulai dengan tipe data numerik. Saya membaginya menjadi dua kelompok: bilangan bulat dan pecahan.

Utuh

Kolom bilangan bulat hanya dapat menyimpan bilangan asli (tidak ada koma desimal). Secara default, mereka bisa positif atau negatif. Jika opsi tersebut dipilih TANPA TANDATANGANI, maka hanya bilangan positif yang dapat disimpan.

MySQL mendukung 5 jenis bilangan bulat dengan ukuran dan rentang berbeda:

Tipe data numerik pecahan

Tipe ini dapat menyimpan bilangan pecahan: FLOAT, DOUBLE dan DECIMAL.

FLOAT membutuhkan 4 byte, DOUBLE membutuhkan 8 byte dan mirip dengan yang sebelumnya. GANDA lebih akurat.

DECIMAL(M,N) memiliki presisi yang bervariasi. M adalah jumlah digit maksimum, N adalah jumlah digit setelah koma.

Misalnya, DECIMAL(13,4) memiliki 9 tempat desimal dan 4 tempat desimal.

Tipe data string

Anda bisa menebak dari namanya bahwa mereka bisa menyimpan string.

CHAR(N) dapat menyimpan N karakter dan memiliki nilai tetap. Misalnya, CHAR(50) harus selalu berisi 50 karakter per baris di seluruh kolom. Nilai maksimum yang mungkin adalah 255 karakter

VARCHAR(N) bekerja dengan cara yang sama, tetapi rentangnya mungkin berbeda. N - menunjukkan nilai maksimum. Jika string yang disimpan lebih pendek dari N karakter, maka akan memakan lebih sedikit ruang pada hard drive. Nilai maksimum yang mungkin adalah 65535 karakter.

Varian tipe TEXT lebih cocok untuk string panjang. TEXT memiliki batas 65535 karakter, MEDIUMTEXT memiliki batas 16,7 juta karakter, dan LONGTEXT memiliki batas 4,3 miliar karakter. MySQL biasanya menyimpannya di penyimpanan terpisah di server, sehingga penyimpanan utama dibuat sekecil dan secepat mungkin.

.

Kesimpulan

Terima kasih telah membaca artikelnya. SQL adalah bahasa dan alat penting dalam gudang pengembang web.

Kunci Utama adalah field dalam tabel yang secara unik mengidentifikasi setiap baris/record dalam tabel database. Kunci utama harus berisi nilai unik. Kolom kunci utama tidak boleh memiliki nilai.

Sebuah tabel hanya dapat memiliki satu kunci utama, yang dapat terdiri dari satu atau lebih bidang. Ketika beberapa field digunakan sebagai kunci utama, maka disebut kunci komposit.

Jika tabel memiliki kunci utama yang ditentukan pada bidang apa pun, maka Anda tidak dapat memiliki dua catatan yang memiliki nilai yang sama untuk bidang tersebut.

Catatan– Anda bisa menggunakan konsep ini saat membuat tabel database.

Membuat Kunci Utama

Berikut adalah sintaks untuk mendefinisikan atribut ID sebagai kunci utama pada tabel Pelanggan.

BUAT TABEL PELANGGAN(ID INT BUKAN NULL, NAMA VARCHAR (20) BUKAN NULL, USIA INT BUKAN NULL, ALAMAT CHAR (25), DESIMAL GAJI (18, 2), PRIMARY KEY (ID));

Untuk membuat batasan kunci utama pada kolom "ID" ketika tabel PELANGGAN sudah ada, gunakan sintaks SQL berikut:

ALTER TABLE PELANGGAN TAMBAHKAN PRIMARY KEY (ID);

Catatan

Jika Anda menggunakan pernyataan ALTER TABLE untuk menambahkan kunci utama, kolom kunci utama harus sudah dinyatakan tidak mengandung nilai NULL (jika tabel dibuat terlebih dahulu).

Untuk menentukan kunci utama pada beberapa kolom, gunakan sintaks SQL di bawah ini:

BUAT TABEL PELANGGAN(ID INT BUKAN NULL, NAMA VARCHAR (20) BUKAN NULL, USIA INT BUKAN NULL, ALAMAT CHAR (25), DESIMAL GAJI (18, 2), PRIMARY KEY (ID, NAMA));

Untuk membuat batasan kunci utama pada kolom ID dan NAMA ketika tabel PELANGGAN sudah ada, gunakan sintaks SQL berikut.

ALTER TABLE PELANGGAN TAMBAHKAN CONSTRAINT PK_CUSTID PRIMARY KEY (ID, NAMA);

Menghapus kunci utama

Anda dapat menghapus batasan kunci utama dari tabel menggunakan sintaksis yang diberikan di bawah ini.

ALTER TABLE PELANGGAN DROP PRIMARY KEY;

Selama proses desain basis data, keputusan dibuat tentang tabel mana yang harus disertakan dalam basis data, nama apa yang akan dimiliki (pengidentifikasi), tipe data apa yang diperlukan untuk membangun tabel, dan pengguna apa yang dapat mengakses masing-masing tabel tersebut. . Selain itu, untuk membuat tabel secara efektif, Anda perlu menjawab pertanyaan-pertanyaan berikut:

  • Jenis dan ukuran kolom apa yang akan membentuk masing-masing tabel, dan nama apa yang harus Anda pilih untuk kolom tabel?
  • Kolom manakah yang dapat berisi nilai NULL?
  • Apakah mereka akan digunakan? batasan integritas, nilai default dan aturan untuk kolom?
  • Apakah pengindeksan kolom diperlukan, jenis indeks apa yang akan diterapkan ke kolom tertentu?
  • Kolom mana yang akan dimasukkan dalam kunci primer dan asing.

Untuk membuat tabel di lingkungan MS SQL Server, gunakan perintah:

<определение_таблицы>::= BUAT TABEL [ nama_database.[pemilik].<элемент_таблицы>| pemilik. ]nama_tabel (

<элемент_таблицы> ::= {<определение_столбца>} | <имя_столбца>[,...N])<выражение> | <ограничение_таблицы>

SEBAGAI

<Выражение>Biasanya, pemilik tabel (dbo) adalah orang yang membuatnya. menetapkan nilai untuk. kolom terhitung Kolom Terhitung menetapkan nilai untuk- ini adalah kolom virtual, yaitu kolom tersebut tidak disimpan secara fisik dalam tabel dan dihitung menggunakan nilai kolom pada tabel yang sama. Dalam ekspresi untuk kolom terhitung mungkin ada nama kolom reguler, konstanta, dan fungsi yang terikat oleh satu atau lebih operator. Subkueri tidak dapat berpartisipasi dalam ekspresi seperti itu. kolom terhitung dapat disertakan dalam klausa SELECT saat menentukan daftar kolom yang akan dikembalikan sebagai hasil kueri. tidak dapat dimasukkan dalam kunci asing; nilai default tidak digunakan untuknya. Di samping itu, kolom terhitung

<определение_столбца>tidak dapat berpartisipasi dalam operasi INSERT dan DELETE.<тип_данных>::= (nama_kolom<выражение>) [ [ BAWAAN<ограничение_столбца>] | [ IDENTITAS (mulai, langkah) ]]] [

][...N]] Pada definisi kolom, perhatikan parameter IDENTITY, yang menunjukkan bahwa kolom yang bersangkutan akan berada kolom penghitung

. Hanya satu kolom dengan properti ini yang dapat ditentukan per tabel. Anda juga dapat menentukan nilai awal dan langkah kenaikan. Jika nilai-nilai ini tidak ditentukan, keduanya default ke 1. Jika NOT FOR REPLICATION ditentukan dengan kata kunci IDENTITY, server tidak akan secara otomatis menghasilkan nilai untuk kolom itu, tetapi akan mengizinkan nilai arbitrer untuk dimasukkan ke dalam kolom. Pembatasan yang digunakan adalah Dan batasan kolom. Perbedaan diantara keduanya adalah itu batasan kolom hanya berlaku untuk bidang tertentu, dan batasan tabel- ke grup dari satu atau lebih bidang.

<ограничение_столбца>::= [ CONSTRAINT constrainname ] ( [ NULL | NOT NULL ] | [ (PRIMARY KEY | UNIK ) [ CLUSTERED | NONCLUSTERED ] [ WITH FILLFACTOR=fillfactor ] [ ON (filegroupname | DEFAULT ) ] ] ] | [ [ FOREIGN KEY ] REFERENSI table_name [(column_name_table_gen) ] [ ON DELETE ( CASCADE | NO ACTION ) ] [ ON UPDATE ( CASCADE | NO ACTION ) ] [ BUKAN UNTUK REPLIKASI ]] |<лог_выражение>) } <ограничение_таблицы>::= ( [ (KUNCI UTAMA | UNIK ) [ CLUSTERED | NONCLUSTERED ] ((nama_kolom [,...n])) ] |KUNCI ASING[(nama_kolom [,...n])] REFERENSI nama_tabel [(nama_kolom tabel_gen [ ,...n])] [ ON DELETE ( CASCADE | NO ACTION ) ] [ ON UPDATE ( CASCADE | NO ACTION ) ] | BUKAN UNTUK REPLIKASI ] |.

Mari kita pertimbangkan parameter individual dari struktur yang disajikan terkait dengan batasan integritas data. Kendala Integritas lebih diutamakan daripada pemicu, aturan, dan default. KE batasan integritas termasuk batasan kunci utama KUNCI UTAMA batasan kunci asing KUNCI ASING, batasan UNIK, batasan NULL, batasan CHECK.

Batasan kunci utama (PRIMARY KEY)

Sebuah tabel biasanya memiliki kolom atau kombinasi kolom yang nilainya secara unik mengidentifikasi setiap baris dalam tabel. Kolom (atau kolom) ini disebut kunci utama tabel dan diperlukan untuk memastikan integritasnya. Jika kunci utama berisi lebih dari satu kolom, maka nilai dalam satu kolom dapat diduplikasi, tetapi kombinasi nilai semua kolom apa pun kunci utama harus unik.

Saat membuat kunci utama SQL Server secara otomatis membuat indeks unik pada kolom yang merupakan bagian dari kunci utama. Ini mempercepat akses data kolom-kolom ini saat digunakan kunci utama dalam permintaan.

Sebuah tabel hanya dapat memiliki satu batasan PRIMARY KEY, dan tidak ada kolom yang termasuk dalam kunci utama yang dapat bernilai NULL. Saat mencoba menggunakannya sebagai kunci utama kolom (atau sekelompok kolom) yang mana batasan kunci utama tidak dijalankan, kunci utama tidak akan dibuat, dan sistem akan menampilkan pesan kesalahan.

Karena batasan PRIMARY KEY memastikan bahwa data bersifat unik, maka batasan tersebut sering kali didefinisikan demikian kolom penghitung. Penciptaan batasan integritas PRIMARY KEY dimungkinkan baik selama pembuatan maupun kapan mengganti meja. Salah satu janji temu kunci utama adalah ketentuannya integritas referensial data dari beberapa tabel. Tentu saja, ini hanya dapat diimplementasikan dengan mendefinisikan kunci asing terkait di tabel lain.

KENDALA KUNCI ASING

Batasan kunci asing merupakan mekanisme utama pemeliharaan integritas referensial antar tabel dalam database relasional. Kolom tabel anak yang ditetapkan sebagai kunci asing pada parameter FOREIGN KEY digunakan untuk mereferensikan kolom tabel induk yang ada di dalamnya kunci utama. Nama tabel induk dan kolomnya kunci utama ditentukan dalam klausa REFERENSI. Data dalam kolom yang didefinisikan sebagai kunci asing hanya dapat memiliki nilai yang sama dengan nilai di kolom yang terkait dengannya kunci utama meja induk. Nama kolom tidak perlu sama untuk menghubungkan tabel anak dan tabel induk. Kunci utama dapat didefinisikan pada kolom dengan satu nama, sedangkan kolom yang tunduk pada batasan FOREIGN KEY dapat memiliki nama yang sama sekali berbeda. Satu-satunya persyaratan adalah kolomnya cocok dengan tipe dan ukuran data.

Kunci utama dapat direferensikan tidak hanya berdasarkan kolom di tabel lain, tetapi juga berdasarkan kolom yang terletak di tabel yang sama dengan kunci utama itu sendiri; ini memungkinkan Anda membuat struktur rekursif.

Kunci asing tidak hanya dapat dikaitkan dengan kunci utama meja lain. Ini dapat didefinisikan untuk kolom UNIK pada tabel kedua atau kolom lainnya, tetapi tabel tersebut harus berada dalam database yang sama.

Kolom kunci asing dapat berisi nilai NULL, tetapi pemeriksaan batasan FOREIGN KEY diabaikan. Kunci asing dapat diindeks, maka server akan lebih cepat menemukan data yang diperlukan. Kunci asing didefinisikan pada saat pembuatan dan saat mengubah meja.

Keterbatasan integritas referensial menetapkan persyaratan bahwa untuk setiap record di tabel anak harus ada record di tabel induk. Dalam hal ini, mengubah nilai kolom hubungan dalam catatan tabel induk dengan adanya catatan anak diblokir, serta menghapus catatan induk (larangan perubahan dan penghapusan berjenjang), yang dijamin secara default PADA HAPUS parameter NO ACTION dan ON UPDATE NO ACTION. Untuk mengaktifkan efek berjenjang, gunakan parameter ON DELETE CASCADE dan ON UPDATE CASCADE.