2011-03-25 10 views
9

¿Es posible insertar una fila y obtener los valores insertados en la misma consulta?MySql: inserte una fila y obtenga el contenido

Algo así como ...

INSERT INTO `items` (`item`, `number`, `state`) 
(SELECT '3', `number`, `state` FROM `item_bug` WHERE `id`='3') 

a continuación, aparezca ID y ejecutar un

SELECT * FROM `items` WHERE `id`='$id' 

Pero el uso de una sola consulta.

+0

No estoy seguro si lo que está preguntando realmente se puede hacer en una consulta DML pero estoy siguiendo esta pregunta para ver si puede, sería útil saberlo. –

+2

¿Qué pasa con dos consultas? – JohnFx

+0

Nada en absoluto, excepto la sobrecarga ... – Ivan

Respuesta

4

puede llamar a un procedimiento almacenado que llevará a cabo la inserción y devolver un conjunto de resultados en una sola llamada de su capa de aplicación para MySQL:

llamada de procedimiento almacenado

mysql> call insert_user('bar'); 
+---------+----------+ 
| user_id | username | 
+---------+----------+ 
|  1 | bar  | 
+---------+----------+ 
1 row in set (0.02 sec) 

$sqlCmd = sprintf("call insert_user('%s')", ...); 

ejemplo simple:

drop table if exists users; 
create table users 
(
user_id int unsigned not null auto_increment primary key, 
username varchar(32) unique not null 
) 
engine=innodb; 


drop procedure if exists insert_user; 

delimiter # 

create procedure insert_user 
(
in p_username varchar(32) 
) 
begin 
declare v_user_id int unsigned default 0; 

insert into users (username) values (p_username); 

set v_user_id = last_insert_id(); 

-- do more stuff with v_user_id e.g. logs etc... 

select * from users where user_id = v_user_id; 

end# 

delimiter ; 

call insert_user('bar'); 
+0

Parece más lento que el uso de la consulta 2 mysql, ¿no? – Ivan

+5

se subía a su auto y manejaba hasta el supermercado para comprar pan y luego conducir de regreso a casa; luego, conducir de regreso para comprar leche era más rápido que conducir al supermercado y comprar pan y leche? Un viaje o dos? –

+0

¡Eso es genial! Gracias por apoyar! – Luc

5

No, no es posible en MySQL (a diferencia de PostgreSQL, SQL Server y PL/SQL en Oracle).

Tendrás que hacerlo en consultas separadas.

0

si está utilizando php entonces

en lugar de ello se puede utilizar

mysql_insert_id(); 

que dará a la identificación de último registro insertado.

Los demás datos serán los mismos que los insertados. Solo cambiará la identificación que puede obtener por mysql_insert_id()

Así que no necesita ejecutar la segunda consulta.

+0

Sí, gracias, lo sé, pero esta no es mi pregunta :) – Ivan

7

ejecutar su sentencia de inserción y entonces usted puede hacer esto:

SELECT * FROM `items` WHERE `id`= LAST_INSERT_ID() 
+0

¿Cómo se inserta una fila? – Quassnoi

+0

@Quassnoi: Lo siento si no estaba claro. La expectativa es que el OP ejecuta la instrucción INSERT tal como figura en la pregunta original. Leeré mejor la respuesta. –

+0

la pregunta original pregunta por "insertar una fila y obtener los valores insertados en la misma consulta". – Quassnoi

Cuestiones relacionadas