INSERT...RETURNING
INSERT ... RETURNING был добавлен в MariaDB 10.5.0 и возвращает результат набора вставленных строк.
Синтаксис
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [PARTITION (partition_list)] [(col,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE
col=expr
[, col=expr] ... ] [RETURNING select_expr
[, select_expr ...]]
Или:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [PARTITION (partition_list)]
SET col={expr | DEFAULT}, ...
[ ON DUPLICATE KEY UPDATE
col=expr
[, col=expr] ... ] [RETURNING select_expr
[, select_expr ...]]
Или:
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [PARTITION (partition_list)] [(col,...)]
SELECT ...
[ ON DUPLICATE KEY UPDATE
col=expr
[, col=expr] ... ] [RETURNING select_expr
[, select_expr ...]]
Описание
INSERT ... RETURNING возвращает результат набора вставленных строк.
Это возвращает перечисленные столбцы для всех вставленных строк или, как альтернатива, указанное выражение SELECT. Любые SQL-выражения, которые могут быть вычислены, могут использоваться в выражении select для предложения RETURNING, включая виртуальные столбцы и псевдонимы, выражения, использующие различные операторы, такие как побитовые, логические и арифметические операторы, функции строк, функции даты и времени, числовые функции, функции управления потоком, вторичные функции и хранимые функции. Вместе с этим можно также использовать утверждения с подзапросами и подготовленными операторами.
Примеры
Простые операторы INSERT:
CREATE OR REPLACE TABLE t2 (id INT, animal VARCHAR(20), t TIMESTAMP); INSERT INTO t2 (id) VALUES (2),(3) RETURNING id,t; +------+---------------------+ | id | t | +------+---------------------+ | 2 | 2021-04-28 00:59:32 | | 3 | 2021-04-28 00:59:32 | +------+---------------------+
INSERT INTO t2(id,animal) VALUES (1,'Dog'),(2,'Lion'),(3,'Tiger'),(4,'Leopard') RETURNING id,id+id,id&id,id||id; +------+-------+-------+--------+ | id | id+id | id&id | id||id | +------+-------+-------+--------+ | 1 | 2 | 1 | 1 | | 2 | 4 | 2 | 1 | | 3 | 6 | 3 | 1 | | 4 | 8 | 4 | 1 | +------+-------+-------+--------+
Использование хранимых функций в RETURNING
DELIMITER |
CREATE FUNCTION f(arg INT) RETURNS INT
BEGIN
RETURN (SELECT arg+arg);
END|
DELIMITER ;
PREPARE stmt FROM "INSERT INTO t1 SET id1=1, animal1='Bear' RETURNING f(id1), UPPER(animal1)";
EXECUTE stmt;
+---------+----------------+
| f(id1) | UPPER(animal1) |
+---------+----------------+
| 2 | BEAR |
+---------+----------------+
Подзапросы в предложении RETURNING, возвращающие более одной строки или столбца, использовать нельзя.
Агрегатные функции не могут использоваться в предложении RETURNING. Поскольку агрегатные функции работают над набором значений, и если цель состоит в получении счетчика строк, то ROW_COUNT() с SELECT можно использовать или его можно использовать в INSERT...SELECT...RETURNING, если таблица в предложении RETURNING не такая же, как таблица INSERT.
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/insertreturning/