MySql:插入一行并获取内容

Iva*_*van 18 mysql insert

是否可以插入行并在同一查询中插入值?

就像是...

INSERT INTO `items` (`item`, `number`, `state`) 
(SELECT '3', `number`, `state` FROM `item_bug` WHERE `id`='3')
Run Code Online (Sandbox Code Playgroud)

然后,获取ID并执行

SELECT * FROM `items` WHERE `id`='$id'
Run Code Online (Sandbox Code Playgroud)

但只使用一个查询.

Joe*_*lli 10

执行insert语句然后你可以这样做:

SELECT * FROM `items` WHERE `id`= LAST_INSERT_ID()
Run Code Online (Sandbox Code Playgroud)


Jon*_*ack 9

你可以调用一个存储过程来执行插入操作,并在从app层到mysql的单个调用中返回一个结果集:

存储过程调用

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

$sqlCmd = sprintf("call insert_user('%s')", ...);
Run Code Online (Sandbox Code Playgroud)

简单的例子:

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');
Run Code Online (Sandbox Code Playgroud)

  • 会跳进你的车然后开车去超市购买面包然后开车回家,然后开车回去购买牛奶比开车去超市购买面包和牛奶要快吗?一两次旅行? (6认同)

Qua*_*noi 5

不,这是不可能的MySQL(不像PostgreSQLSQL ServerPL/SQLOracle)。

您将必须在单独的查询中执行此操作。