Saya dapat menemukan sintaks "grafik" di sini di situs web SQLite, tetapi tidak ada contoh dan kode saya mogok. Saya memiliki tabel lain dengan batasan unik pada satu kolom, tetapi saya ingin menambahkan batasan pada tabel pada dua kolom. Inilah yang saya miliki yang menyebabkan SQLiteException dengan pesan "kesalahan sintaks".
CREATE TABLE name (column defs)
UNIQUE (col_name1, col_name2) ON CONFLICT REPLACE
Saya melakukan ini berdasarkan hal berikut:
Agar lebih jelas, dokumentasi pada tautan yang saya berikan mengatakan bahwa CONTSTRAINT name
harus ada sebelum definisi kendala saya.
Namun, sesuatu yang dapat mengarah ke solusi adalah bahwa apa pun yang mengikuti definisi kolom kurung saya adalah apa yang dikeluhkan oleh debugger.
Jika saya taruh
...last_column_name last_col_datatype) CONSTRAINT ...
kesalahannya dekat "CONSTRAINT": kesalahan sintaks
Jika saya taruh
...last_column_name last_col_datatype) UNIQUE ...
kesalahannya dekat "UNIQUE": kesalahan sintaks
Jawaban:
Masukkan deklarasi UNIK dalam bagian definisi kolom; contoh kerja:
sumber
ON CONFLICT IGNORE
(belum mencoba mengganti) dengan lebih dari 2 kolom, tapi saya tidak melihatnya menghormati batasan unik, itu hanya dengan riang menambahkan duplikat.ON CONFLICT REPLACE
mungkin bukan yang Anda inginkan - menghapus baris yang sudah ada untuk memungkinkan baris baru dimasukkan. Biasanya, saya ingin ABORT atau ROLLBACK pelanggaran kendala. SQLite ON CONFLICT klausaNah, sintaks Anda tidak cocok dengan tautan yang Anda masukkan, yang menentukan:
sumber
Hati-hati bagaimana Anda mendefinisikan tabel karena Anda akan mendapatkan hasil berbeda saat disisipkan. Pertimbangkan yang berikut ini
Sementara efek sisipkan / perbarui adalah sama,
id
perubahan berdasarkan pada tipe definisi tabel (lihat tabel kedua di mana 'Alice' sekarang memilikiid = 4
; tabel pertama melakukan lebih banyak dari apa yang saya harapkan untuk dilakukan, menjaga kunci PRIMER tetap sama. ). Waspadai efek ini.sumber
Jika Anda sudah memiliki tabel dan tidak bisa / tidak ingin membuat ulang untuk alasan apa pun, gunakan indeks :
sumber