ЗАМЕЩЕНИЕ...ВОЗВРАЩАЯ
ЗАМЕЩЕНИЕ ... ВОЗВРАЩАЯ было добавлено в MariaDB 10.5.0, и возвращает набор результатов из изменённых строк.
Синтаксис
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [PARTITION (partition_list)] [(col,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
[RETURNING select_expr
[, select_expr ...]]
Или:
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [PARTITION (partition_list)]
SET col={expr | DEFAULT}, ...
[RETURNING select_expr
[, select_expr ...]]
Или:
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [PARTITION (partition_list)] [(col,...)]
SELECT ...
[RETURNING select_expr
[, select_expr ...]]
Описание
REPLACE ... RETURNING возвращает набор результатов из изменённых строк.
Это возвращает перечисленные столбцы для всех строк, которые были изменены, или, альтернативно, указанное выражение SELECT. Любые SQL-выражения, которые могут быть вычислены, могут быть использованы в выражении select для предложения RETURNING, включая виртуальные столбцы и псевдонимы, выражения, использующие различные операторы, такие как побитовые, логические и арифметические операторы, строковые функции, функции даты и времени, числовые функции, функции управления потоком, вторичные функции и хранимые функции. Кроме того, можно использовать утверждения с подзапросами и подготовленными утверждениями.
Примеры
Простое оператор ЗАМЕЩЕНИЯ
REPLACE INTO t2 VALUES (1,'Leopard'),(2,'Dog') RETURNING id2, id2+id2 as Total ,id2|id2, id2&&id2; +-----+-------+---------+----------+ | id2 | Total | id2|id2 | id2&&id2 | +-----+-------+---------+----------+ | 1 | 2 | 1 | 1 | | 2 | 4 | 2 | 1 | +-----+-------+---------+----------+
Использование хранимых функций в RETURNING
DELIMITER |
CREATE FUNCTION f(arg INT) RETURNS INT
BEGIN
RETURN (SELECT arg+arg);
END|
DELIMITER ;
PREPARE stmt FROM "REPLACE INTO t2 SET id2=3, animal2='Fox' RETURNING f2(id2),
UPPER(animal2)";
EXECUTE stmt;
+---------+----------------+
| f2(id2) | UPPER(animal2) |
+---------+----------------+
| 6 | FOX |
+---------+----------------+
Подзапросы в операторе
REPLACE INTO t1 SELECT * FROM t2 RETURNING (SELECT id2 FROM t2 WHERE id2 IN (SELECT id2 FROM t2 WHERE id2=1)) AS new_id; +--------+ | new_id | +--------+ | 1 | | 1 | | 1 | | 1 | +--------+
Подзапросы в предложении RETURNING, которые возвращают более одной строки или столбца, использовать нельзя.
Агрегатные функции нельзя использовать в предложении RETURNING. Поскольку агрегатные функции работают над набором значений, и если цель — получить количество строк, можно использовать ROW_COUNT() с SELECT, или можно использовать его в ЗАМЕЩЕНИЕ...ВЫБЕРИТЕ...ВОЗВРАЩАЯ, если таблица в предложении RETURNING не совпадает с таблицей ЗАМЕЩЕНИЯ.
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/replacereturning/