mysql połączone unikalne klucze


Czy istnieje sposób w MySQL, aby mieć dwa unikalne klucze i jakoś je połączyć?
na przykład, jeśli mam następującą tabelę, a „tytuł” ​​i „sklep” to unikalne klucze
id | category | title | price | store
1 | outdoors | fishing rod | 59.99 | wal-mart
2 | auto | Penzoil Oil | 9.99 | target

i próbuję wstawić następny rekord. Ten nowy wpis zostanie zignorowany, ponieważ nazwa to „wędka” ORAZ repozytorium to „wal-mart” i istnieje już wpis o tej nazwie i repozytorium
| outdoors | fishing rod | 30.99 | wal-mart

ale gdybym próbował wstawić następujący wpis, zostałby zaakceptowany, ponieważ nie ma wpisu o nazwie „wędka” i repozytorium „cel”
| outdoors | fishing rod | 30.99 | target

czy jest to możliwe tylko z MySQL?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz zdefiniować indeks dla wielu kolumn, na przykład:
CREATE UNIQUE INDEX arbitrary_index_name ON table_name (title, store);
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Tak. Zamiast dwóch oddzielnych unikatowych ograniczeń należy utworzyć jedno unikalne ograniczenie dla obu kolumn.
Składnia
CREATE INDEX
to:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[index_type]
ON tbl_name (index_col_name,...)
[algorithm_option | lock_option] ...

Na przykład wyglądałoby to mniej więcej tak:
CREATE UNIQUE INDEX index_name ON tbl_name (title,store);

Konieczne będzie również usunięcie dwóch utworzonych nieprawidłowych unikalnych indeksów.
Aby uzyskać więcej informacji na temat tworzenia indeksów, zobacz

dokumentacja
http://dev.mysql.com/doc/refma ... .html
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Potrzebujesz

unikalny klucz z wieloma kolumnami
http://dev.mysql.com/doc/refma ... .html
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

ALTER TABLE
table_name
ADD UNIQUE INDEX(
title
,
store
);
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Tak, możesz!
ALTER TABLE table_name DROP PRIMARY KEY;
ALTER TABLE table_name ADD PRIMARY KEY(title, store);

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się