是否有可能插入一行,并得到插在同一个查询中的值?
就像是...
INSERT INTO `items` (`item`, `number`, `state`)
(SELECT '3', `number`, `state` FROM `item_bug` WHERE `id`='3')
然后,获得ID和执行
SELECT * FROM `items` WHERE `id`='$id'
但只用一个查询。
是否有可能插入一行,并得到插在同一个查询中的值?
就像是...
INSERT INTO `items` (`item`, `number`, `state`)
(SELECT '3', `number`, `state` FROM `item_bug` WHERE `id`='3')
然后,获得ID和执行
SELECT * FROM `items` WHERE `id`='$id'
但只用一个查询。
你可以调用将执行插入,并从你的应用程序层到MySQL的单一调用返回结果集的存储过程:
存储过程调用
mysql> call insert_user('bar');
+---------+----------+
| user_id | username |
+---------+----------+
| 1 | bar |
+---------+----------+
1 row in set (0.02 sec)
$sqlCmd = sprintf("call insert_user('%s')", ...);
简单的例子:
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');
执行INSERT语句中,然后你可以这样做:
SELECT * FROM `items` WHERE `id`= LAST_INSERT_ID()
不,这不可能在MySQL
(不像PostgreSQL
, SQL Server
和PL/SQL
中Oracle
)。
你将不得不做,在单独的查询。
如果你正在使用PHP然后
而不是这个,你可以使用
mysql_insert_id();
这将给最后插入记录的ID。
作为插入的其他数据将是相同的。 只有ID会改变您可以通过获得mysql_insert_id()
所以,你不需要运行第二个查询。