Saya ingin menghapus atau menambah kolom dalam basis data sqlite
Saya menggunakan kueri berikut untuk menghapus kolom.
ALTER TABLE TABLENAME DROP COLUMN COLUMNNAME
Tapi itu memberi kesalahan
System.Data.SQLite.SQLiteException: SQLite error
near "DROP": syntax error
Jawaban:
ALTER TABLE SQLite
Kamu bisa:
sumber
PRAGMA foreign_keys=OFF
. Dalam hal ini, setelah melakukan urutan ini, seseorang harus meneleponPRAGMA foreign_keys=ON
untuk mengaktifkan kembali kunci asing.RENAME COLUMN
didukung. 🎉 sqlite.org/releaselog/3_25_0.htmlSaya telah menulis implementasi Java berdasarkan cara yang disarankan Sqlite untuk melakukan ini:
Untuk mendapatkan kolom tabel, saya menggunakan "PRAGMA table_info":
Saya benar-benar menulis tentang itu di blog saya, Anda dapat melihat lebih banyak penjelasan di sana:
http://udinic.wordpress.com/2012/05/09/sqlite-drop-column-support/
sumber
INSERT
pernyataan, Anda juga dapat membuat tabel baru dengan melakukan"CREAT TABLE" + tableName + "AS SELECT " + columnsSeperated + " FROM " + tableName + "_old;"
Seperti yang ditunjukkan orang lain
sumber: http://www.sqlite.org/lang_altertable.html
Meskipun Anda selalu dapat membuat tabel baru dan kemudian menjatuhkan yang lebih lama. Saya akan mencoba menjelaskan solusi ini dengan sebuah contoh.
Sekarang Anda ingin menghapus kolom
height
dari tabel ini.Buat tabel lain yang disebut
new_person
Sekarang salin data dari tabel lama
Sekarang Drop the
person
table dan ganti namanyanew_person
menjadiperson
Jadi sekarang jika Anda melakukan
.schema
, Anda akan melihatsumber
CREATE TABLE new_person AS SELECT id, first_name, last_name, age FROM person;
http://www.sqlite.org/lang_altertable.html
Seperti yang Anda lihat dalam diagram, hanya ADD COLUMN yang didukung. Namun, ada solusi (agak berat): http://www.sqlite.org/faq.html#q11
sumber
Kami tidak dapat menjatuhkan kolom tertentu dalam SQLite 3. Lihat FAQ .
sumber
Seperti yang telah ditunjukkan orang lain,
ALTER TABLE
pernyataan sqlite tidak mendukungDROP COLUMN
, dan resep standar untuk melakukan ini tidak mempertahankan kendala & indeks.Berikut adalah beberapa kode python untuk melakukan ini secara umum, sambil mempertahankan semua batasan dan indeks utama.
Harap cadangkan basis data Anda sebelum menggunakan! Fungsi ini bergantung pada pernyataan pernyataan CREATE TABLE yang asli dan berpotensi sedikit tidak aman - misalnya akan melakukan hal yang salah jika pengidentifikasi berisi tanda koma atau tanda kurung yang disematkan.
Jika ada yang mau berkontribusi cara yang lebih baik untuk mengurai SQL, itu akan bagus!
PEMBARUAN Saya menemukan cara yang lebih baik untuk menguraikan menggunakan paket open-source
sqlparse
. Jika ada minat saya akan mempostingnya di sini, tinggalkan komentar memintanya ...sumber
Saya menulis ulang jawaban @Udinic sehingga kode menghasilkan kueri pembuatan tabel secara otomatis . Itu juga tidak perlu
ConnectionSource
. Ini juga harus melakukan ini di dalam transaksi .sumber
DB Browser untuk SQLite memungkinkan Anda untuk menambah atau menjatuhkan kolom.
Di tampilan utama, tab Database Structure, klik pada nama tabel. Sebuah tombol Modify Tablediaktifkan, yang membuka jendela baru di mana Anda dapat memilih kolom / bidang dan menghapusnya.
sumber
Anda dapat menggunakan Sqlitebrowser. Dalam mode browser, untuk database dan tabel masing-masing, di bawah struktur tab-database, mengikuti opsi Modify Table, kolom masing-masing dapat dihapus.
sumber
Saya telah meningkatkan jawaban user2638929 dan sekarang dapat mempertahankan jenis kolom, kunci utama, nilai default dll.
PS. Saya digunakan di sini
android.arch.persistence.db.SupportSQLiteDatabase
, tetapi Anda dapat dengan mudah memodifikasinya untuk digunakanandroid.database.sqlite.SQLiteDatabase
sumber
Saya kira yang ingin Anda lakukan adalah migrasi basis data. 'Drop'ping a kolom tidak ada di SQLite. Namun Anda bisa, menambahkan kolom tambahan dengan menggunakan kueri tabel ALTER.
sumber
Anda dapat menggunakan Administrator SQlite untuk mengubah nama kolom. Klik kanan pada nama Table dan pilih Edit Table. Di sini Anda akan menemukan struktur tabel dan Anda dapat dengan mudah mengganti nama.
sumber
Karena SQLite memiliki dukungan terbatas untuk ALTER TABLE sehingga Anda hanya dapat ADD kolom di akhir tabel ATAU Ganti TABLE_NAME dalam SQLite.
Berikut ini adalah Jawaban Terbaik BAGAIMANA CARA MENGHAPUS KOLOM DARI SQLITE?
kunjungi Hapus kolom dari tabel SQLite
sumber
Sebagai alternatif:
Jika Anda memiliki tabel dengan skema
Anda dapat menggunakan
CREATE TABLE...AS
pernyataan sepertiCREATE TABLE person2 AS SELECT id, first_name, last_name, age FROM person;
, yaitu meninggalkan kolom yang tidak Anda inginkan. Kemudian jatuhkanperson
tabel asli dan ganti nama yang baru.Perhatikan metode ini menghasilkan tabel tidak memiliki KUNCI UTAMA dan tidak ada kendala. Untuk melestarikannya, gunakan metode yang dijelaskan orang lain untuk membuat tabel baru, atau gunakan tabel sementara sebagai perantara.
sumber
Jawaban untuk pertanyaan yang berbeda ini berorientasi pada memodifikasi kolom, tetapi saya yakin sebagian dari jawabannya juga dapat menghasilkan pendekatan yang berguna jika Anda memiliki banyak kolom dan tidak ingin mengetik ulang sebagian besar dari mereka dengan tangan untuk pernyataan INSERT Anda:
https://stackoverflow.com/a/10385666
Anda bisa membuang basis data Anda seperti yang dijelaskan dalam tautan di atas, lalu ambil pernyataan "buat tabel" dan templat "sisipkan" dari dump itu, lalu ikuti petunjuk di entri FAQ SQLite "Bagaimana cara menambah atau menghapus kolom dari yang sudah ada tabel dalam SQLite. " (FAQ terhubung di tempat lain di halaman ini.)
sumber
Implementasi
Python
berdasarkan informasi di http://www.sqlite.org/faq.html#q11 .Skrip ini pertama-tama membuat tabel sementara acak dan menyisipkan data hanya kolom yang diperlukan kecuali yang akan dihapus. Kemudian mengembalikan tabel asli berdasarkan tabel sementara dan menjatuhkan tabel sementara.
sumber
Solusi saya, hanya perlu memanggil metode ini.
Dan metode bantu untuk mendapatkan kolom:
sumber
dan panggil saja metode
sumber
Anda sekarang juga dapat menggunakan browser DB untuk SQLite untuk memanipulasi kolom
sumber
contoh untuk menambahkan kolom: -
di sini siswa adalah nama_kabel dan TOB adalah nama_kolom yang akan ditambahkan.
Ini bekerja dan diuji.
sumber