Apa sintaksis untuk menentukan kunci primer pada lebih dari 1 kolom dalam SQLITE?
sqlite
primary-key
ddl
composite-primary-key
Bogdan Gavril MSFT
sumber
sumber
Jawaban:
Menurut dokumentasi , itu
sumber
sumber
NULL
diizinkan di kunci utama. Jawaban ini menekankan bahwa jika Anda menginginkan perilaku yang lebih standar, Anda perlu menambahkanNOT NULL
diri Anda sendiri. Jawaban saya hanyalah sintaks yang sangat mendasar untuk kunci primer multi-kolom.Iya. Tetapi ingat bahwa kunci utama tersebut memungkinkan
NULL
nilai di kedua kolom beberapa kali.Buat tabel seperti itu:
Sekarang ini berfungsi tanpa peringatan:
sumber
NULL
?Dasar:
Jika kolom Anda adalah kunci asing dari tabel lain (kasus umum):
sumber
Bidang kunci primer harus dinyatakan sebagai bukan nol (ini bukan standar karena definisi kunci primer adalah bahwa ia harus unik dan bukan nol). Tetapi di bawah ini adalah praktik yang baik untuk semua kunci utama multi-kolom dalam DBMS apa pun.
sumber
Sejak versi 3.8.2 dari SQLite, sebuah alternatif untuk spesifikasi NOT NOT NULL adalah spesifikasi "TANPA ROWID": [ 1 ]
Tabel "TANPA ROWID" memiliki potensi keuntungan efisiensi, jadi alternatif yang kurang tepat untuk dipertimbangkan adalah:
Misalnya, pada prompt sqlite3:
sqlite> insert into t values(1,null,3); Error: NOT NULL constraint failed: t.c2
sumber
WITHOUT ROWID
memiliki implikasi tambahan, dan itu tidak boleh digunakan sebagai alternatif untuk menulis diNOT NULL
sebelah kunci utama Anda.Dalam cara lain, Anda juga dapat membuat dua kolom kunci utama
unique
dan auto-increment kunciprimary
. Sama seperti ini: https://stackoverflow.com/a/6157337sumber
PRIMARY KEY (id, name)
tidak bekerja untuk saya. Menambahkan kendala sebagai gantinya melakukan pekerjaan.CREATE TABLE IF NOT EXISTS customer (id INTEGER, name TEXT, user INTEGER, CONSTRAINT PK_CUSTOMER PRIMARY KEY (user, id))
sumber
Kode berikut membuat tabel dengan 2 kolom sebagai kunci utama dalam SQLite.
LARUTAN:
sumber