ВСТАВИТЬ
Синтаксис
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 используется для вставки новых строк в существующую таблицу. Формы INSERT ... VALUES и INSERT ... SET оператора вставляют строки на основе явно указанных значений. Форма INSERT ... SELECT вставляет строки, выбранные из другой таблицы или таблиц. INSERT ... SELECT рассматривается подробнее в статье INSERT ... SELECT.
Имя таблицы может быть указано в форме db_name.tbl_name или, если выбрана базовая база данных, в форме tbl_name (см. Квалификаторы идентификаторов). Это позволяет использовать INSERT ... SELECT для копирования строк между различными базами данных.
Оператор PARTITION может быть использован как в части INSERT, так и в части SELECT. Подробности см. в разделе Обрезка и выборка партиций.
Оператор RETURNING был представлен в MariaDB 10.5.
Список столбцов необязателен. Он указывает, какие значения вставляются явно и в каком порядке. Если этот пункт не указан, все значения должны быть указаны явно в том же порядке, в котором они перечислены в определении таблицы.
Список значений следует за ключевым словом VALUES или VALUE (которые взаимозаменяемы, независимо от того, сколько значений вы хотите вставить), и заключен в скобки. Значения должны быть указаны в том же порядке, что и список столбцов. Можно указать более одного списка для вставки более чем одной строки одним оператором. Если вставляется много строк, это оптимизация скорости.
Для операторов с одной строкой оператор SET может быть проще, поскольку вам не нужно запоминать порядок столбцов. Все значения указываются в форме col = expr.
Значения также могут быть указаны в виде SQL-выражения или подзапроса. Однако подзапрос не может получить доступ к той же таблице, что и таблица, указанная в операторе INTO.
Если вы используете ключевое слово LOW_PRIORITY, выполнение оператора INSERT откладывается до тех пор, пока другие клиенты не закончат чтение из таблицы. Если вы используете ключевое слово HIGH_PRIORITY, оператор имеет такой же приоритет, как операторы SELECT. Это влияет только на движки хранения, которые используют только блокировку на уровне таблицы (MyISAM, MEMORY, MERGE). Однако если одно из этих ключевых слов указано, одновременные операции вставки (concurrent inserts) использовать нельзя. Подробности см. в разделе одновременные операции вставки и оператор HIGH_PRIORITY и LOW_PRIORITY.
INSERT DELAYED
Дополнительную информацию об опции DELAYED см. в разделе INSERT DELAYED.
HIGH PRIORITY и LOW PRIORITY
См. HIGH_PRIORITY и LOW_PRIORITY.
Значения по умолчанию и дублирующие значения
Подробности см. в разделе Вставка - значения по умолчанию и дублирующие значения.
INSERT IGNORE
См. INSERT IGNORE.
INSERT ON DUPLICATE KEY UPDATE
См. INSERT ON DUPLICATE KEY UPDATE.
Примеры
Указание имён столбцов:
INSERT INTO person (first_name, last_name) VALUES ('John', 'Doe');
Вставка более 1 строки за раз:
INSERT INTO tbl_name VALUES (1, "row 1"), (2, "row 2");
Использование оператора SET:
INSERT INTO person SET first_name = 'John', last_name = 'Doe';
Выбор из другой таблицы:
INSERT INTO contractor SELECT * FROM person WHERE status = 'c';
Дополнительные примеры см. в разделах INSERT ON DUPLICATE KEY UPDATE и INSERT IGNORE.
INSERT ... RETURNING
INSERT ... RETURNING возвращает набор результатов вставленных строк.
Это возвращает перечисленные столбцы для всех вставленных строк или, как альтернатива, указанное выражение SELECT. Любые SQL-выражения, которые могут быть вычислены, могут быть использованы в выражении select для оператора RETURNING, включая виртуальные столбцы и псевдонимы, выражения, использующие различные операторы, такие как побитовые, логические и арифметические операторы, функции строк, функции даты и времени, числовые функции, функции управления потоком, вторичные функции и хранимые функции. Кроме того, могут быть использованы операторы с подзапросами и подготовленные операторы.
Примеры
Простой оператор INSERT
INSERT INTO t2 VALUES (1,'Dog'),(2,'Lion'),(3,'Tiger'),(4,'Leopard') RETURNING id2,id2+id2,id2&id2,id2||id2; +-----+---------+---------+----------+ | id2 | id2+id2 | id2&id2 | id2||id2 | +-----+---------+---------+----------+ | 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.
См. также
- INSERT DELAYED
- INSERT SELECT
- REPLACE Эквивалентно DELETE + INSERT конфликтующей строки.
- HIGH_PRIORITY и LOW_PRIORITY
- Одновременные операции вставки
- Вставка - значения по умолчанию и дублирующие значения
- INSERT IGNORE
- INSERT ON DUPLICATE KEY UPDATE
- Как быстро вставить данные в MariaDB
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/insert/