2012-08-25 17 views
10

MySQL'te iki benzersiz tuşa sahip olmanın bir yolu var mı? örneğinmysql benzersiz anahtarları birleştirdi

i Aşağıdaki tablo ve 'title'and 'mağaza' benzersiz anahtarlar

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

vardır ve ben şu kayıt eklemeye çalışırsanız. Bu yeni kayıt başlığı "olta" dir VE mağazası 'vel-mart' olduğu ve başlık ve mağaza

| outdoors | fishing rod | 30.99 | wal-mart 

sahip mevcut kayıt yoktur çünkü göz ardı ancak olacağını ben şu kaydı eklemek için çalıştı eğer Bu sadece MySQL ile mümkündür "hedefe"

| outdoors | fishing rod | 30.99 | target 

ait "olta" başlığı ile mağaza ile var olan bir kayıt olmadığından kabul olurdu?

cevap

22

Sen ör .:

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

Evet. İki ayrı benzersiz kısıtlama yerine, her iki sütunda da benzersiz bir kısıtlama oluşturmalısınız.

CREATE INDEX sözdizimi: senin Örneğin

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

böyle görünecektir: Ayrıca oluşturduğunuz iki yanlış benzersiz dizinler bırakın gerekecek

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

.

Dizin oluşturma hakkında daha fazla bilgi için documentation'a bakın.

+0

+1 Mevcut benzersiz dizinleri bırakmak için +1 – Bugs

-1

Evet yapabilirsiniz birden çok sütun üzerinde bir dizin tanımlayabilirsiniz!

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

Bu kötü bir fikir. Sayısal bir birincil anahtarın tutarlılığı (çoğu tablo var) ve basitliği gibi birçok avantajı vardır. – Bugs

1

alter TABLO table_name ADD benzersiz bir dizin (title, store);

+0

Kodunuzun nasıl sağlandığı ve soruya nasıl cevap verdiği hakkında ek bilgi alabilir misiniz? –