2012-08-25 33 views
10

Có cách nào trong MySQL để có hai khóa duy nhất và kết nối chúng bằng cách nào đó?mysql kết hợp các phím duy nhất

ví dụ nếu tôi đã bảng sau và 'title'and 'cửa hàng' là một phím độc đáo

id | category | title  | price | store 
1 | outdoors | fishing rod | 59.99 | wal-mart 
2 | auto  | Penzoil Oil | 9.99 | target 

và tôi cố gắng để chèn các bản ghi sau. kỷ lục mới này sẽ được bỏ qua bởi vì tiêu đề là "cần câu" VÀ cửa hàng là 'wal-mart' và có một kỷ lục hiện tại với danh hiệu đó và lưu trữ

| outdoors | fishing rod | 30.99 | wal-mart 

nhưng nếu tôi cố gắng để chèn các bản ghi sau nó sẽ được chấp nhận vì không có bản ghi nào tồn tại với tiêu đề "cần câu" và lưu trữ "mục tiêu"

| outdoors | fishing rod | 30.99 | target 

là điều này có thể chỉ với MySQL?

Trả lời

22

Bạn có thể xác định một chỉ mục trên nhiều cột, ví dụ .:

CREATE UNIQUE INDEX arbitrary_index_name ON table_name (title, store); 
6

Có. Thay vì hai ràng buộc duy nhất riêng biệt, bạn nên tạo một ràng buộc duy nhất trên cả hai cột.

Cú pháp CREATE INDEX là:

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name 
    [index_type] 
    ON tbl_name (index_col_name,...) 
    [algorithm_option | lock_option] ... 

Ví dụ của bạn nó sẽ giống như thế này:

CREATE UNIQUE INDEX index_name ON tbl_name (title,store); 

Bạn cũng sẽ phải thả hai chỉ số duy nhất không chính xác mà bạn đã tạo.

Xem documentation để biết thêm chi tiết về cách tạo chỉ mục.

+0

+1 để giảm chỉ mục duy nhất hiện tại – Bugs

-1

Có bạn có thể!

ALTER TABLE table_name DROP PRIMARY KEY; 
ALTER TABLE table_name ADD PRIMARY KEY(title, store); 
+2

Đây là một ý tưởng tồi. Một khóa chính số có nhiều ưu điểm, chẳng hạn như tính nhất quán (hầu hết các bảng đều có nó) và sự đơn giản. – Bugs

1

ALTER TABLE table_name ADD INDEX UNIQUE (title, store);

+0

Bạn có thể thêm một số thông tin về cách mã của bạn cung cấp và trả lời cho câu hỏi không? –

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