Saya memiliki tabel berikut:
CREATE TABLE child(
id INTEGER PRIMARY KEY,
parent_id INTEGER,
description TEXT);
Bagaimana cara menambahkan batasan kunci asing parent_id
? Asumsikan kunci asing diaktifkan.
Sebagian besar contoh menganggap Anda sedang membuat tabel - Saya ingin menambahkan batasan ke tabel yang sudah ada.
sql
sqlite
foreign-keys
ddl
Dane O'Connor
sumber
sumber
Jawaban:
Tidak boleh.
Meskipun sintaks SQL-92 untuk menambahkan kunci asing ke tabel Anda adalah sebagai berikut:
SQLite tidak mendukung dengan
ADD CONSTRAINT
varian dariALTER TABLE
perintah ( sqlite.org: SQL Fitur Itu SQLite Apakah Tidak Melaksanakan ).Oleh karena itu, satu-satunya cara untuk menambahkan kunci asing di sqlite 3.6.1 adalah
CREATE TABLE
sebagai berikut:Sayangnya Anda harus menyimpan data yang ada ke tabel sementara, menghapus tabel lama, membuat tabel baru dengan batasan FK, lalu menyalin kembali data dari tabel sementara. ( sqlite.org - FAQ: Q11 )
sumber
RENAME TO
adalah salah satu dari sedikitALTER TABLE
varian yang saat ini didukung di sqlite 3.Anda dapat menambahkan batasan jika Anda mengubah tabel dan menambahkan kolom yang menggunakan batasan.
Pertama, buat tabel tanpa parent_id:
Kemudian, ubah tabel:
sumber
Silakan periksa https://www.sqlite.org/lang_altertable.html#otheralter
sumber
Ya, Anda bisa, tanpa menambahkan kolom baru. Anda harus berhati-hati melakukannya dengan benar untuk menghindari kerusakan database, jadi Anda harus benar-benar mencadangkan database Anda sebelum mencoba ini.
untuk contoh spesifik Anda:
atau lebih umum:
Apa pun itu, Anda mungkin ingin melihat definisi SQL terlebih dahulu sebelum membuat perubahan:
Jika Anda menggunakan pendekatan replace (), Anda mungkin merasa terbantu, sebelum menjalankan, untuk terlebih dahulu menguji perintah replace () Anda dengan menjalankan:
sumber
Jika Anda menggunakan add-on Firefox sqlite-manager, Anda dapat melakukan hal berikut:
Alih-alih menjatuhkan dan membuat tabel lagi, seseorang dapat memodifikasinya seperti ini.
Di kotak teks Kolom, klik kanan pada nama kolom terakhir yang terdaftar untuk membuka menu konteks dan pilih Edit Kolom. Perhatikan bahwa jika kolom terakhir dalam definisi TABEL adalah KUNCI UTAMA, maka pertama-tama perlu menambahkan kolom baru dan kemudian mengedit jenis kolom dari kolom baru untuk menambahkan definisi KUNCI ASING. Di dalam kotak Jenis Kolom, tambahkan koma dan
definisi setelah tipe data. Klik pada tombol Change dan kemudian klik tombol Yes pada kotak dialog Dangerous Operation.
Referensi: Manajer Sqlite
sumber
Anda dapat mencoba ini:
sumber
Pada dasarnya Anda tidak bisa tetapi Anda bisa melewati situasinya.
Cara yang benar untuk menambahkan batasan kunci asing ke tabel yang ada adalah dengan perintah berikut.
Kemudian salin data parent_Id ke newCol lalu hapus kolom Parent_Id . Karenanya, tidak perlu tabel sementara.
sumber
Pertama menambahkan kolom di tabel anak
Cid
sebagaiint
kemudianalter table
dengan kode di bawah. Dengan cara ini Anda dapat menambahkan kunci asingCid
sebagai kunci utama dari tabel induk dan menggunakannya sebagai kunci asing di tabel anak ... semoga ini akan membantu Anda karena ini baik untuk saya:sumber