2011-02-04 46 views
6

Trong câu hỏi thường gặp về SQLite [1] nó được đề cập rằng SQLite không có hỗ trợ ALTER TABLE đầy đủ. Trong một câu hỏi trước về StackOverflow, một thủ thuật được đề cập để thực hiện các sửa đổi bảng.Cập nhật các tham chiếu khóa ngoài khi thực hiện thay đổi bảng SQLite

Điều tôi muốn biết là cách giữ các tham chiếu KEY NGOẠI NGOẠI vì chúng được di chuyển đến bảng được đổi tên mà sau đó bị xóa. Tôi có nên làm cùng một thủ thuật với mỗi bảng có mối quan hệ khóa ngoại với bảng thực tế mà tôi đang sửa đổi không?

[1] http://www.sqlite.org/lang_altertable.html

[2] How do I rename a column in a SQLite database table?

Trả lời

5

Vâng, bạn sẽ cần phải làm như "lừa" như vậy. Khi bạn đổi tên bảng đã tham chiếu, các ràng buộc khóa ngoài vẫn tham chiếu đến nó dưới tên mới của nó. Vì SQLite không hỗ trợ "DROP CONSTRAINT", bạn cũng sẽ phải xây dựng lại các bảng tham chiếu với các ràng buộc khóa ngoài được sửa chữa.

Thực tế, bạn sẽ không thể thả bảng cũ cho đến khi bạn sửa các tham chiếu khóa ngoài. Miễn là PRAGMA foreign_keys=ON;, SQLite3 sẽ không cho phép bạn thả bảng mà vẫn có khóa ngoài tham chiếu nó.

3

Với các phiên bản hiện tại của các ràng buộc tham chiếu SQLite trong các bảng khác không được viết lại khi xử lý khóa ngoài đã bị tắt bằng cách sử dụng PRAGMA foreign_keys=OFF.

Không thể nói nếu hành vi đó khác trong năm 2011.

Các vấn đề liên quan