Ver Mensaje Individual
  #4 (permalink)  
Antiguo 07/10/2015, 06:34
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Equivalente de MSSQL @@identity en MySQL

Los campos de tipo identity no existen n MYSQL (tampoco en otros DBMS como Oracle, por ejemplo). Lo que se usa en MySQL como tales son los campos de tipo numérico entero (TINYINT, SMALLINT, MEDIUMINT, INT y BIGINT), a los que se les asigna el atributo de AUTO_INCREMENT.
Pero a diferencia de SQL Server, los campos AI, no pueden generar números anticipadamente al INSERT, esto quiere decir que no podrás generar un próximo valor para luego insertarlo, del mismo modo que SQL Server, proque la incrementación del valor del campo lo gestiona el propio MySQL.
Lo que se hace en ese caso es dejar sin valor ese campo en el INSERT, si indicas los campos, o bien poner NULL donde va:

Caso sin el campo:
Código MySQL:
Ver original
  1. INSERT INTO Tabla(b, c) VALUES ('valor al B', 12);
Caso con el campo:
Código MySQL:
Ver original
  1. INSERT INTO Tabla(a, b, c) VALUES (NULL, 'valor al B', 12);
Caso sin indicar campos:
Código MySQL:
Ver original
  1. INSERT INTO Tabla VALUES (NULL, 'valor al B', 12);

Ten en cuenta que si insertas manualmente un valor, ese valor pasará a ser el máximo AI generado, y todo INSERT posterior tomará ese valor como referencia.

Cuando usas este tipo de cosas en MySQL lo que debes hacer es
1) Insertar en la tabla el registro padre.
2) Recuperar el valor autogenerado con la función LAST_INSERT_ID().
Código MySQL:
Ver original
  1. INSERT INTO Tabla(a, b, c) VALUES (NULL, 'valor al B', 12);
  2. SET idnuevo = LAST_INSERT_ID();
3) Usarlo como valor para la tabla dependiente.

Nota: Recuperar el ID generado debe ser la primera tarea inmediatamente posterior al insert, porque si ejecutas cualquier otra, el valor devuelto será CERO.

¿Se entiende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)