Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Equivalente de MSSQL @@identity en MySQL

Estas en el tema de Equivalente de MSSQL @@identity en MySQL en el foro de Bases de Datos General en Foros del Web. Hola a todos, Soy nuevo en MySQL, estoy haciendo un procedimiento almacenado que me inserte valores en dos tablas a la vez, lo que pasa ...
  #1 (permalink)  
Antiguo 06/10/2015, 23:12
Avatar de v_i_n_i_c_i_o  
Fecha de Ingreso: noviembre-2003
Ubicación: Costa Rica
Mensajes: 422
Antigüedad: 20 años, 5 meses
Puntos: 0
Equivalente de MSSQL @@identity en MySQL

Hola a todos,

Soy nuevo en MySQL, estoy haciendo un procedimiento almacenado que me inserte valores en dos tablas a la vez, lo que pasa es que el valor creado en la primera tabla tiene un ID autoincrementado que necesito usar en la siguiente tabla.
En MSSQL sería algo así:

WHILE ( condición )
BEGIN TRY
BEGIN TRAN

INSERT INTO Tabla1
(Campo1, campo2, campo3)

VALUES
(valor1, valor2, valor3)


DECLARE @campoId INT
SELECT @campoId = @@IDENTITY


INSERT INTO Tabla2
(usrId, campoId)
VALUES
(@userId, @campoId)

COMMIT TRAN

END TRY


Lo que necesito es usar el valor de @campoId que se genera en esta linea SELECT @campoId = @@IDENTITY. Esto es solo parte del código, que en MSSQL está funcional.

Les agradezco cualquier ayuda!
__________________
"Un experto es una persona que ha cometido todos los errores que se pueden cometer en un determinado campo" - Niels Bohr
:cool: 0!)!u!/\ :patada:
  #2 (permalink)  
Antiguo 07/10/2015, 03:10
Avatar de 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

Pues en MySQL ninguna parte de ese código te va a funcionar, más allá de lo que preguntas.
Si lo que deseas es migrar a MySQL ese SP, tendrás que reescribirlo entero y modificar tablas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 07/10/2015, 06:20
Avatar de v_i_n_i_c_i_o  
Fecha de Ingreso: noviembre-2003
Ubicación: Costa Rica
Mensajes: 422
Antigüedad: 20 años, 5 meses
Puntos: 0
Respuesta: Equivalente de MSSQL @@identity en MySQL

Hola, gracias por responder.

Estoy escribiendo el SP de nuevo y lo que necesito saber es qué debo usar en lugar del @@identity en MySQL

Gracias.
__________________
"Un experto es una persona que ha cometido todos los errores que se pueden cometer en un determinado campo" - Niels Bohr
:cool: 0!)!u!/\ :patada:
  #4 (permalink)  
Antiguo 07/10/2015, 06:34
Avatar de 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)
  #5 (permalink)  
Antiguo 07/10/2015, 06:48
Avatar de v_i_n_i_c_i_o  
Fecha de Ingreso: noviembre-2003
Ubicación: Costa Rica
Mensajes: 422
Antigüedad: 20 años, 5 meses
Puntos: 0
Respuesta: Equivalente de MSSQL @@identity en MySQL

Excelente, eso es lo que necesitaba. Voy a intentar el LAST_INSERT_ID() y les cuento
Saludos
__________________
"Un experto es una persona que ha cometido todos los errores que se pueden cometer en un determinado campo" - Niels Bohr
:cool: 0!)!u!/\ :patada:

Etiquetas: campo, equivalente, mssql, mysql, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:25.