El uso de claves primarias con auto_increment en MySQL se deberÃa tener en cuenta cuando el valor de la clave no es importante. Esto es, por ejemplo si tenemos una tabla de empleados y consideramos que la clave primaria es el número de empleado o el número de indentidad del ciudadano, pues quizás no sea buena idea usar auto_increment. Pero si la clave va a ser un número aleatorio, el valor no importa, el uso de auto_increment serÃa lo más adecuado.
Para definir una tabla con clave primaria con auto_increment, deberÃas ejecutar la siguiente sentencia:
create table `empleados` (
`id` int (10) NOT NULL AUTO_INCREMENT ,
`nombre` varchar (250) NOT NULL ,
`correo` varchar (250) NOT NULL ,
PRIMARY KEY ( `id` ) )
Con esta tabla, cuando insertemos un nuevo dato no se debe indicar el ID, ya directamente MySQL lo asignará.
El problema suele ser que muchas veces, cuando insertamos un registro, necesitamos la clave del registro nuevo para usarlo en la inserción en otra tabla relacionada. Por lo que si usamos el auto_increment, a priori no seremos capaces de saber cuál es el valor. En estas circunstancias deberemos usar la sentencia LAST_INSERT_ID(), la cual nos devolverá el ultimo id insertado, pero hay que tener cuidado con esto, porque con la concurrencia podemos obtener resultados no deseados.
También se puede reinicializar el valor del auto_increment, pero teniendo en cuenta que no se puede usar un valor menor o igual que uno que ya se haya usado. Por lo que habrá que tener cuidado en las exportaciones.
alter tabla tabla auto_increment=50;
Buenas,
La verdad que es una utilidad muy buena, en su momento la utilicé mucho, pero si me permites recomendarte, serÃa mejor que te acostumbraras con otra sentencia, debido a que INSERT IGNORE es sólo permitido para MySQL y el dÃa que utilices Oracle o SQLServer tendrás que buscarte la vida con otra sentencia. Sólo es para que lo tengas en cuenta (a mi me paso)
No comparto ocultar los errores de esta forma. Creo que es mejor que falle y solucionarlo, ya que el error podrÃa tener otras consecuencias.
Por otro lado, si de forma controlada se quiere hacer un insert/update sin tener claro si antes ya existÃa el registro (incluso teniendo diferentes valores en caso de ser update) me gusta la opción “ON DUPLICATE KEY UPDATE”.
Saludos!
Tecnico, estoy totalmente de acuerdo contigo en intentar usar SQL estándar, yo también he sufrido lo de migrar de una BD a MySQL y es un infierno.
Armando, realmente, me va a venir de perlas para hacer una migración de una tabla a otra, que a veces me sale error de ids duplicados porque para ahorrar tiempo mando procesos concurrentes, pero claro, pierdo más tiempo en depurar el proceso que en meterle esta pequeña chapu, total, es una tarea puntual para una migración que quiero hacer.
Saludos a ambos