是否可以插入一行并获取插入到相同查询中的值?MySql:插入一行并获取内容
喜欢的东西...
INSERT INTO `items` (`item`, `number`, `state`)
(SELECT '3', `number`, `state` FROM `item_bug` WHERE `id`='3')
然后,获得ID和使用只有一个查询执行
SELECT * FROM `items` WHERE `id`='$id'
不过。
是否可以插入一行并获取插入到相同查询中的值?MySql:插入一行并获取内容
喜欢的东西...
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');
不,这不可能在MySQL
(不像PostgreSQL
,SQL Server
和PL/SQL
在Oracle
)。
您必须在单独的查询中完成。
如果你正在使用PHP然后
,而不是这个,你可以使用
mysql_insert_id();
,这将给最后插入记录的ID。
其他数据将与插入的相同。 只有id会改变,你可以通过mysql_insert_id()
所以你不需要运行第二个查询。
是的,谢谢,我知道,但这不是我的问题:) – Ivan 2011-03-25 15:52:54
不知道你问什么才能真正在一个DML查询来完成,但我开始关注此问题,看它是否能 - 这将有助于了解。 – 2011-03-25 13:04:29
两个查询有什么问题? – JohnFx 2011-03-25 13:05:39
没有什么,除了过载.. – Ivan 2011-03-25 15:52:32