MySql: добавьте строку и получите контент
Можно ли вставить строку и получить значения, вставленные в один и тот же запрос?
Что-то вроде...
INSERT INTO `items` (`item`, `number`, `state`)
(SELECT '3', `number`, `state` FROM `item_bug` WHERE `id`='3')
И затем, получите идентификатор и выполните
SELECT * FROM `items` WHERE `id`='$id'
Но используя только один запрос.
Ответы
Ответ 1
вы можете вызвать хранимую процедуру, которая будет выполнять вставку и возвращать набор результатов в одном вызове с вашего уровня приложения в 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');
Ответ 2
Выполните инструкцию insert, и вы можете сделать это:
SELECT * FROM `items` WHERE `id`= LAST_INSERT_ID()
Ответ 3
Нет, это невозможно в MySQL
(в отличие от PostgreSQL
, SQL Server
и PL/SQL
в Oracle
).
Вам придется делать это в отдельных запросах.
Ответ 4
, если вы используете php, затем
вместо этого вы можете использовать
mysql_insert_id();
который даст идентификатор последней вставленной записи.
Другие данные будут такими же, как и вставлены.
Изменится только идентификатор, который вы можете получить с помощью mysql_insert_id()
Таким образом, вам не нужно запускать второй запрос.
Ответ 5
Вы можете сделать это, используя несколько операторов, если вы хотите выбрать этот маршрут. Во-первых, при подключении к базе данных убедитесь, что для нескольких операторов установлено значение 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] в этом примере.