2008-12-05 20 views
5

Tengo un problema muy simple y una solución que funcionará, pero estoy buscando uno más simple.Clave principal de dos columnas en MySQL

Me gustaría evitar que se agreguen filas a una base de datos cuando varios valores son iguales a los existentes. Por ejemplo, si a2 = a1 AND b2 = b1, los datos se rechazan. Si solo a2 = a1 o solo b2 = b1 está permitido. Básicamente, quiero que actúe como una clave principal que requiere que ambos valores coincidan.

Sé que puedo hacer esto a través de la validación antes de escribir en la base de datos - ej. selecciona * donde a = 'a2' yb = 'b2' y luego evita escribir nuevos datos cuando obtengo resultados. Lo que prefiero hacer es habilitar una configuración de MySQL, como la clave principal, que bloqueará datos como este automáticamente.

No estoy muy familiarizado con MySQL fuera de las funciones básicas, así que me disculpo si esto es trivialmente fácil. Buscar en Google todo tipo de cosas en torno al índice único y la clave principal no ayuda.

Respuesta

10

Cree un índice exclusivo para las columnas que desea que sean exclusivas.

Ej:

CREATE UNIQUE INDEX index_name ON table(col1, col2); 

Ver la Create index manual MySQL.

+0

http: // dev.mysql.com/doc/refman/4.1/en/create-index.html – Chris

0

Desea utilizar la sintaxis de MySQL CONSTRAINT al crear su tabla (o alterar una tabla existente).

+0

http://dev.mysql.com/doc/refman/4.1/en/constraint-primary-key.html – Chris

0

Además de lo que dice gcores, me gustaría añadir que su sugerencia alternativa, de validación en la capa de aplicación, es algo malo de hacer. ¿Qué sucede si dos aplicaciones están tratando de insertar los mismos datos, y están intercalados? Ambos pueden verificar, ver que los datos no están allí, y luego ambos insertar. Si usa un índice único, hay dos ventajas:

  • El usuario no tiene que verificar si el valor ya existe. Simplemente intentan la operación, y si falla, eso significa que el valor ya existía. Esto reduce ligeramente la carga en su base de datos y simplifica la lógica de la aplicación.
  • La base de datos siempre será válida, porque está aplicando reglas por sí misma. Es mucho más fácil trabajar con una base de datos cuando se puede razonar sobre reglas rápidas, en lugar de la trampa de "esperamos que no haya duplicados, pero es técnicamente posible ..."
Cuestiones relacionadas