2010-03-23 40 views
8

Tôi có hai bảng -> Biến (id, name) và Variable_Entries (id, var_id, value).MySQL: Ràng buộc duy nhất trên nhiều trường

Tôi muốn mỗi biến có một tập hợp các mục nhập duy nhất. Nếu tôi làm cho mục nhập giá trị duy nhất thì một biến khác sẽ không thể có cùng giá trị đó không đúng.

Có cách nào để làm cho cột giá trị duy nhất cho var_id giống hệt nhau không?

Trả lời

9

Có:

alter table Variable_Entries add unique (var_id, value); 

Bây giờ bạn có một hạn chế duy nhất trên toàn var_id và giá trị so với nhau. Nói cách khác, không có sự xuất hiện của var_id và giá trị có thể xuất hiện nhiều lần.

+0

cảm ơn, và những người dưới đây quá-- Tôi không thể tìm thấy điều này bất cứ nơi nào – Cypher

+0

Có cách nào để thực thi điều này khi tạo bảng? – puk

+2

bạn có thể không được muốn biết nhưng vì lợi ích của người khác, 'tạo bảng tbl_table ( \t id số nguyên không null auto_increment, \t fname varchar (255), lname varchar (255), \t CONSTRAINT tbl_table TIỂU KEY (id), \t unique (fname, lname) ) ' –

0

Thêm khóa duy nhất của biến_Các mục nhập cho trường kết hợp var_id/value.

Ngoài ra, bạn nên luôn sử dụng các từ số ít cho tên bảng (người dùng thay vì người dùng). Không bao giờ sử dụng các ký tự viết hoa trong tên bảng, bởi vì điều đó sẽ khiến bạn trở thành NIGHTMARE trên các hệ điều hành khác nhau.

+0

Tôi tự hỏi tại sao chúng ta nên luôn luôn sử dụng tên đặc biệt cho tên bảng? –

+0

"Bạn nên luôn luôn sử dụng các từ số ít cho tên bảng" - Tôi không đồng ý. Tôi luôn luôn sử dụng số nhiều, và tôi biết tôi không đơn độc (ActiveRecord, ví dụ, làm như vậy). –

+0

CakePHP phụ thuộc vào số nhiều cho tên bảng ... Đó là một bình luận hài hước :) Chữ hoa, mặc dù ... Tôi đồng ý – luigi7up

6

Vâng, bạn có thể tạo một hỗn hợp unique key:

ALTER TABLE variable_entries ADD UNIQUE (var_id, value); 
+0

Cảm ơn từ * composite *, làm cho tôi hiểu nó hoạt động như thế nào. –

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