2012-03-30 38 views
23

Tôi gặp sự cố với SQLITE3.SQLite3 có hỗ trợ các ràng buộc khoá ngoại không?

Tôi đã tạo ra 2 bảng personsorders sử dụng các tập lệnh SQL sau:

sqlite> create table Persons(
      P_Id int primary key, 
      LastName varchar, 
      FirstName varchar, 
      Address varchar, 
      City varchar 
     ); 

sqlite> create table Orders(
      O_Id int NOT NULL, 
      OrderNo int NOT NULL, 
      P_Id int, 
      PRIMARY KEY (O_Id), 
      FOREIGN KEY (P_Id) REFERENCES Persons(P_Id) 
     ); 

sqlite> insert into Orders values(1,77895,3); 

sqlite> select * from Orders; 

1|77895|3 

sqlite> 

Mặc dù bảng người là hàng có sản phẩm nào có thể được chèn vào bảng orders.

Nó không hiển thị bất kỳ lỗi nào.

Làm cách nào có thể.

Trả lời

51

Trong 3.x SQLite, bạn phải thực hiện các truy vấn sau đây mỗi khi bạn kết nối với một cơ sở dữ liệu SQLite:

PRAGMA foreign_keys = ON; 

Nếu không, SQLite sẽ bỏ qua tất cả các ràng buộc khóa ngoài.

Tại sao mỗi lần? Khả năng tương thích ngược với SQLite 2.x, theo số documentation.

Trong SQLite 4.x, các ràng buộc FK sẽ là enabled by default.

+0

Mỗi lần? Bạn không thể bật tính năng này vĩnh viễn? – mafu

+0

@mafu Có, mọi lúc. Tôi đã chỉnh sửa câu trả lời để giải thích lý do. – kijin

+7

Chỉ cần chạy vào ngày hôm nay. Đây là điều cồng kềnh nhất. –

0

Bạn đã đọc tài liệu chưa? Các main page nói nó được giới thiệu với phiên bản 3.6.19. link cho biết cách sử dụng khóa ngoài (Mã của bạn là chính xác).

Mã của bạn có đưa ra bất kỳ thông báo lỗi nào mà bạn bỏ qua không? Bạn đã kiểm tra tất cả các điều kiện tiên quyết trong quy định trong tài liệu?

+0

sau đó vui lòng cho tôi biết cách xóa phiên bản cũ của tôi và cài đặt phiên bản mới của sqlite3. –

+0

@AbbasMulani cách gỡ cài đặt và cài đặt tùy thuộc vào hệ điều hành của bạn và những thứ khác. Kiểm tra phiên bản nào hiện đang được cài đặt và phiên bản đã được cài đặt như thế nào. Các bước để cài đặt một phiên bản mới không phải là quá lớn. – mrab

0

Check-out nếu bạn có ràng buộc khoá ngoại cho phép trong SQLite của bạn: http://sqlite.org/foreignkeys.html#fk_enable

+0

nó không hiển thị bất cứ điều gì khi tôi nhập lệnh PRAGMA foreign_key; –

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