2013-08-22 51 views
26

Tôi đang tạo một bảng có tham chiếu khóa ngoài. Tôi đang tự hỏi về cú pháp cần thiết. Chủ yếu là tôi đã nhìn thấy những điều sau đây (từ http://www.sqlite.org/foreignkeys.html#fk_basics):Cú pháp SQLite để tạo bảng bằng khóa ngoài

CREATE TABLE artist( 
    artistid INTEGER PRIMARY KEY, 
    artistname TEXT 
); 
CREATE TABLE track( 
    trackid  INTEGER, 
    trackname TEXT, 
    trackartist INTEGER, 
    FOREIGN KEY(trackartist) REFERENCES artist(artistid) 
); 

Tuy nhiên, từ cùng một trang web (http://www.sqlite.org/foreignkeys.html#fk_actions) Tôi thấy điều này:

CREATE TABLE artist( 
    artistid INTEGER PRIMARY KEY, 
    artistname TEXT 
); 
CREATE TABLE track( 
    trackid  INTEGER, 
    trackname TEXT, 
    trackartist INTEGER REFERENCES artist(artistid) ON UPDATE CASCADE 
); 

Cú pháp thứ hai là ngắn gọn hơn một chút, nhưng tôi muốn biết nếu kết quả bằng cách nào đó khác nhau (ngoài ON UPDATE CASCADE, điều này tất nhiên có hiệu lực; tôi chỉ đưa nó vào vì tôi đã sao chép mã chính xác từ trang web được tham chiếu và vì tôi không biết cú pháp trên không ' t chỉ áp dụng khi thực hiện một đặc điểm kỹ thuật như vậy). Tôi đang làm việc trong Android, trong trường hợp có vấn đề.

Trả lời

18

Xem syntax diagrams.

Cú pháp đầu tiên là ràng buộc bảng , trong khi cú pháp thứ hai là ràng buộc cột . Trong các ví dụ này, chúng hoạt động giống nhau.

Bạn sẽ cần một ràng buộc bảng cho một khóa trên nhiều cột (nơi bạn không có một cột duy nhất bạn có thể đính kèm nó vào).

18

Câu trả lời này có thể không liên quan đến bạn nhưng tôi nghĩ nó sẽ hữu ích cho những người đang làm việc với cơ sở dữ liệu Android.
IN SQLite Các ràng buộc khóa ngoài được tắt theo mặc định (để tương thích ngược). Bạn phải bật tính năng này rõ ràng bằng cách sử dụng

PRAGMA foreign_keys = 1 

sau khi bạn thiết lập kết nối với cơ sở dữ liệu. Đây là liên kết đến các tài liệu chính thức giải thích nó sâu hơn. http://sqlite.org/foreignkeys.html Vui lòng điều hướng để bật hỗ trợ khóa ngoài trong liên kết ở trên.

+0

Xin chào War_Hero, tôi nhận được khóa ngoại là null. Bạn có thể xem xét nó. Đây là 2 bảng của tôi Bảng 1 - chuỗi cuối cùng DATABASE_CREATE_TABLE = "tạo bảng nếu không tồn tại scannerValuess (id số nguyên, partName văn bản null, văn bản chi phí null, khóa ngoại (id) tham chiếu scannerUserValuess (userid)) "; Bảng 2 - chuỗi cuối cùng DATABASE_CREATE_TABLE_USER = "tạo bảng nếu không tồn tại scannerUserValuess (userid integer primary key autoincrement, tên văn bản không null, di động văn bản không null, địa chỉ văn bản không null, ngày văn bản không null)"; Xin hãy giúp tôi ASAP.Thanks Advance. – Naveen