6.4.3 Синтаксис оператора INSERT
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name [(col_name,...)]
VALUES (expression,...),(...),...
или INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
или INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name
SET col_name=expression, col_name=expression, ...
Оператор INSERT
вставляет новые строки в существующую таблицу. Форма
данной команды INSERT ... VALUES
вставляет строки в соответствии с точно
указанными в команде значениями. Форма INSERT ... SELECT
вставляет строки,
выбранные из другой таблицы или таблиц. Форма INSERT ... VALUES
со списком
из нескольких значений поддерживается в версии MySQL 3.22.5 и более
поздних. Синтаксис выражения col_name=expression
поддерживается в версии
MySQL 3.22.10 и более поздних.
tbl_name
задает таблицу, в которую должны быть внесены строки. Столбцы,
для которых заданы величины в команде, указываются в списке имен столбцов
или в части SET
:
-
Если не указан список столбцов для
INSERT ... VALUES
или INSERT ...
SELECT
, то величины для всех столбцов должны быть определены в списке
VALUES()
или в результате работы SELECT
. Если порядок столбцов в
таблице неизвестен, для его получения можно использовать DESCRIBE tbl_name
.
-
Любой столбец, для которого явно не указано значение, будет установлен
в свое значение по умолчанию. Например, если в заданном списке
столбцов не указаны все столбцы в данной таблице, то не упомянутые
столбцы устанавливаются в свои значения по умолчанию. Установка
значений по умолчанию описывается в разделе section 6.5.3 Синтаксис оператора
CREATE TABLE
. В
MySQL всегда предусмотрено значение по умолчанию для каждого поля. Это
требование ``навязано'' MySQL, чтобы обеспечить возможность работы как
с таблицами, поддерживающими транзакции, так и с таблицами, не
поддерживающими их. Наша точка зрения (разработчиков) состоит в том,
что проверка содержимого полей должна производиться приложением, а не
сервером баз данных.
-
Выражение
expression
может относится к любому столбцу, который ранее
был внесен в список значений. Например, можно указать следующее:
mysql> INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);
Но нельзя указать:
mysql> INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);
-
Если указывается ключевое слово
LOW_PRIORITY
, то выполнение данной
команды INSERT
будет задержано до тех пор, пока другие клиенты не
завершат чтение этой таблицы. В этом случае данный клиент должен
ожидать, пока данная команда вставки не будет завершена, что в случае
интенсивного использования таблицы может потребовать значительного
времени. В противоположность этому команда INSERT DELAYED
позволяет
данному клиенту продолжать операцию сразу же. See section 6.4.4 Синтаксис оператора INSERT DELAYED
.
Следует отметить, что указатель LOW_PRIORITY
обычно не
используется с таблицами MyISAM
, поскольку при его указании становятся
невозможными параллельные вставки. See section 7.1 Таблицы MyISAM.
-
Если в команде
INSERT
со строками, имеющими много значений,
указывается ключевое слово IGNORE
, то все строки, имеющие
дублирующиеся ключи PRIMARY
или UNIQUE
в этой таблице, будут
проигнорированы и не будут внесены. Если не указывать IGNORE
, то
данная операция вставки прекращается при обнаружении строки, имеющей
дублирующееся значение существующего ключа. Количество строк,
внесенных в данную таблицу, можно определить при помощи функции C API
mysql_info()
.
-
Если MySQL был сконфигурирован с использованием опции
DONT_USE_DEFAULT_FIELDS
, то команда INSERT
будет генерировать ошибку,
если явно не указать величины для всех столбцов, которые требуют
значений не-NULL
. See section 2.3.3 Типичные опции configure
.
-
С помощью функции
mysql_insert_id
можно найти величину, использованную
для столбца AUTO_INCREMENT
. See section 8.4.3.126 mysql_insert_id()
.
Если задается команда INSERT ... SELECT
или INSERT ... VALUES
со списками
из нескольких значений, то для получения информации о данном запросе можно
использовать функцию C API mysql_info()
. Формат этой информационной строки
приведен ниже:
Records: 100 Duplicates: 0 Warnings: 0
Duplicates
показывает число строк, которые не могли быть внесены,
поскольку они дублировали бы значения некоторых существующих уникальных
индексов. Указатель Warnings
показывает число попыток внести величину в
столбец, который по какой-либо причине оказался проблематичным.
Предупреждения возникают при выполнении любого из следующих условий:
-
Внесение
NULL
в столбец, который был объявлен, как NOT NULL
. Данный
столбец устанавливается в значение, заданное по умолчанию.
-
Установка числового столбца в значение, лежащее за пределами его
допустимого диапазона. Данная величина усекается до соответствующей
конечной точки этого диапазона.
-
Занесение в числовой столбец такой величины, как
'10.34 a'
. Конечные
данные удаляются и вносится только оставшаяся числовая часть. Если
величина вовсе не имеет смысла как число, то столбец устанавливается в
0
.
-
Внесение в столбцы типа
CHAR
, VARCHAR
, TEXT
или BLOB
строки,
превосходящей максимальную длину столбца. Данная величина усекается до
максимальной длины столбца.
-
Внесение в столбец даты или времени строки, недопустимой для данного
типа столбца. Этот столбец устанавливается в нулевую величину,
соответствующую данному типу.
Главы
Add your own comment.