2010-04-23 37 views
150

Tôi có thể tìm cú pháp "biểu đồ" về điều này trên trang web SQLite, nhưng không có ví dụ và mã của tôi bị lỗi. Tôi có các bảng khác với các ràng buộc duy nhất trên một cột, nhưng tôi muốn thêm một ràng buộc vào bảng trên hai cột. Đây là những gì tôi có mà gây ra một SQLiteException với thông báo "lỗi cú pháp".Ràng buộc bảng SQLite - duy nhất trên nhiều cột

CREATE TABLE name (column defs) 
UNIQUE (col_name1, col_name2) ON CONFLICT REPLACE 

tôi đang làm điều này dựa trên những điều sau đây:

table-constraint

Để được rõ ràng, tài liệu vào liên kết tôi cung cấp nói rằng CONTSTRAINT name nên đến trước khi định nghĩa hạn chế của tôi.

Điều gì đó có thể dẫn đến giải pháp mặc dù là bất cứ điều gì sau định nghĩa cột được lồng tiếng của tôi là những gì trình gỡ lỗi than phiền.

Nếu tôi đặt

...last_column_name last_col_datatype) CONSTRAINT ... 

lỗi là gần "CONSTRAINT": lỗi cú pháp

Nếu tôi đặt

...last_column_name last_col_datatype) UNIQUE ... 

lỗi là gần "UNIQUE": cú pháp lỗi

+1

:

CREATE TABLE name (column defs, UNIQUE (col_name1, col_name2) ON CONFLICT REPLACE); 

dụ làm việc UNIQUE thiếu dấu phẩy trước khi bắt đầu .. – magid

Trả lời

305

Đặt khai UNIQUE trong phần định nghĩa cột:

CREATE TABLE a (i INT, j INT, UNIQUE(i, j) ON CONFLICT REPLACE); 
+0

Wow. Tôi có thể lấy ví dụ đơn giản của bạn để làm việc hoàn hảo. Một ví dụ phức tạp hơn là đá mông của tôi. Thật khó để tìm ra dấu ngoặc đơn thừa khi bạn có một tá dấu ngoặc đơn. Tôi cuối cùng cũng hiểu cách làm việc. Cảm ơn câu trả lời ngắn gọn. – Justin

+4

Câu trả lời hay nhất +1. Cú pháp tạo này có cho phép tôi sử dụng phương thức chèn thông thường hay không, và không phải là insertWithOnConflict với cờ SQLiteDatabase.CONFLICT_REPLACE? –

+1

Tôi đang sử dụng 'ON CONFLICT IGNORE' (chưa thử thay thế) với hơn 2 cột, nhưng tôi không thấy nó tôn trọng ràng buộc duy nhất, nó chỉ vui vẻ thêm các bản sao. – Michael

7

Vâng, cú pháp của bạn không phù hợp với liên kết mà bạn có, trong đó nêu rõ:

CREATE TABLE name (column defs) 
    CONSTRAINT constraint_name -- This is new 
    UNIQUE (col_name1, col_name2) ON CONFLICT REPLACE 
+0

Tôi đã làm điều đó ban đầu ... đã không hoạt động. Tôi đã thử nó một lần nữa chỉ trong trường hợp ... vẫn không làm việc – Rich

+5

Ayman có câu trả lời. . . –

+1

TẠO TABLE tên (cột defs, CONSTRAINT constraint_name - Đây là mới UNIQUE (col_name1, col_name2) ON CONFLICT REPLACE) – Afwas

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