MySql: вставьте строку и получите содержимое - PullRequest
14 голосов
/ 25 марта 2011

Можно ли вставить строку и получить значения, вставленные в тот же запрос?

Что-то вроде ...

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

А затем, получить идентификатор и выполнить

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

Но используя только один запрос.

Ответы [ 5 ]

9 голосов
/ 25 марта 2011

Выполните оператор вставки, а затем вы можете сделать это:

SELECT * FROM `items` WHERE `id`= LAST_INSERT_ID()
7 голосов
/ 25 марта 2011

Вы можете вызвать хранимую процедуру, которая выполнит вставку и вернет набор результатов за один вызов из уровня приложения в 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');
5 голосов
/ 25 марта 2011

Нет, это невозможно в MySQL (в отличие от PostgreSQL, SQL Server и PL/SQL в Oracle).

Вам придется делать это в отдельных запросах.

0 голосов
/ 05 июня 2019

Вы можете сделать это, используя несколько операторов, если вы хотите выбрать этот маршрут.Во-первых, когда вы подключаетесь к базе данных, убедитесь, что для нескольких операторов установлено значение true:

var connection = mysql.createConnection({
    host: databaseHost,
    user: databaseUser,
    password: databasePassword,
    database: databaseName,
    multipleStatements: true
});

Затем вы можете просто определить свой sql как:

var sql = "your insert statement; your select statement";

Просто разделите отдельные операторы, используяточка с запятой.Ваш результат выбора будет результатом [1] в этом примере.

0 голосов
/ 25 марта 2011

если вы используете php, то

вместо этого вы можете использовать

mysql_insert_id();

, который даст идентификатор последней вставленной записи.

Другие данные будут такими же, как и при вставке. Изменится только идентификатор, который вы можете получить mysql_insert_id()

Так что вам не нужно запускать второй запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...