Tôi có bảng sau:Thay đổi khóa chính của một bảng trong SQLite
[id,lang,data]
Trong trường hợp khóa chính là id
Tôi muốn thay đổi khóa chính để id,lang
mà không làm mất nội dung của bàn. truy vấn tôi phải chạy để thay đổi nó
Cảm ơn
Tôi có bảng sau:Thay đổi khóa chính của một bảng trong SQLite
[id,lang,data]
Trong trường hợp khóa chính là id
Tôi muốn thay đổi khóa chính để id,lang
mà không làm mất nội dung của bàn. truy vấn tôi phải chạy để thay đổi nó
Cảm ơn
Theo nhận xét của @GarnerJosh là gì, bạn không thể chạy một lệnh duy nhất để thay đổi nó - SQLite không cho phép thay đổi cấu trúc bảng hiện có. Thay vào đó, tạo ra một bảng mới với một khóa chính tổng hợp và sao chép dữ liệu qua:
CREATE TABLE my_table_copy(
id INTEGER,
lang INTEGER,
data TEXT,
PRIMARY KEY (id, lang)
);
INSERT INTO my_table_copy (id, lang, data)
SELECT id, lang, data FROM my_table;
DROP TABLE my_table;
ALTER TABLE my_table_copy RENAME TO my_table;
Câu trả lời hay, trong trường hợp này đảm bảo bạn không gọi lại onCreate (db) từ onUpgrade() của bạn, Nếu bạn làm như vậy thì ứng dụng sẽ lại cố gắng tạo bảng của bạn và nó sẽ gây ra sqliteException, bảng đã thoát. vì vậy để tránh sự sụt giảm này và tạo những bảng mà bạn muốn thay đổi. Cảm ơn bạn PinnyM và GamerJosh –
Có thông tin chi tiết về phương pháp này trong tài liệu Sqlite: https://www.sqlite.org/lang_altertable.html "Thực hiện các loại thay đổi lược đồ bảng khác" – Matthieu
Xem: http://stackoverflow.com/questions/1884787/how-do-i-drop-a-constraint-from -a-sqlite-3-6-21-table – GamerJosh