2012-08-25 14 views
10

¿Hay alguna manera en MySQL de tener dos claves únicas y conectarlas de alguna manera?teclas exclusivas combinadas de mysql

por ejemplo, si tengo la siguiente tabla y almacenar 'title'and '' son unas claves únicas

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

y trato de insertar el siguiente registro. Este nuevo disco sería ignorado porque el título es "caña de pescar" Y la tienda es 'Wal-Mart' y hay un registro existente con ese título y almacenar

| outdoors | fishing rod | 30.99 | wal-mart 

pero si he tratado de insertar el siguiente registro sería aceptada porque no hay un registro que existe con el título de "caña de pescar" y tienda de "objetivo"

| outdoors | fishing rod | 30.99 | target 

es esto posible con sólo MySQL?

Respuesta

22

Se puede definir un índice en varias columnas, por ejemplo .:

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

Sí. En lugar de dos restricciones únicas independientes, debe crear una única restricción única en ambas columnas.

La sintaxis es CREATE INDEX:

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

Para su ejemplo se vería algo como esto:

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

También tendrá que soltar los dos índices únicos incorrectos que ha creado.

Consulte el documentation para obtener más información sobre cómo crear índices.

+0

+1 para soltar los índices únicos presentes – Bugs

-1

Sí se puede!

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

Esta es una mala idea. Una clave primaria numérica tiene muchas ventajas, como la consistencia (la mayoría de las tablas lo tienen) y la simplicidad. – Bugs

1

ALTER TABLE table_name Añadir índice único (title, store);

+0

¿Puede obtener información adicional sobre cómo su código proporciona y responde a la pregunta? –

Cuestiones relacionadas