Вставка строк в таблицу, содержащую автоинкрементируемое поле стр. 1
Многие коммерческие продукты допускают использование автоинкрементируемых столбцов в таблицах, то есть столбцов, значение которых формируется автоматически при добавлении новых записей. Такие столбцы широко используются в качестве первичных ключей таблицы, так как они автоматически обеспечивают уникальность за счет того, что генерируемые значения не повторяются. Типичным примером столбца такого типа является последовательный счетчик, который при вставке строки генерирует значение на единицу большее предыдущего значения (значения, полученного при вставке предыдущей строки).
Ниже приводится пример создания таблицы Printer_Inc с автоинкрементируемым столбцом (code) в MS Язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL Server.
Автоинкрементируемое поле определяется посредством конструкции IDENTITY (1, 1). При этом первый параметр свойства IDENTITY (1) определяет, с какого значения начнется отсчет, а второй, — какой шаг будет использоваться для приращения значения. Таким образом, в нашем примере первая вставленная запись будет иметь в столбце code значение 1, вторая — 2 и т. д.
Поскольку в поле code значение формируется автоматически, оператор
приведет к ошибке, даже если в таблице нет строки со значением в поле code, равным 15. Поэтому для вставки строки в таблицу просто не будем указывать это поле точно так же, как и в случае использования значения по умолчанию, то есть
В результате выполнения этого оператора в таблицу Printer_Inc будет вставлена информация о модели 3111 цветного лазерного принтера, стоимость которого равна $599. В поле code окажется значение, которое только случайно может оказаться равным 15. В большинстве случаев этого оказывается достаточно, так как значение автоинкрементируемого поля, как правило, не несет никакой информации; главное, чтобы оно было уникальным.
Однако бывают случаи, когда требуется подставить вполне конкретное значение в автоинкрементируемое поле. Например, нужно перенести уже имеющиеся данные во вновь создаваемую структуру; при этом эти данные участвуют в связи «один-ко-многим» со стороны «один». Таким образом, мы не можем допустить тут произвола. С другой стороны, не хочется отказываться от автоинкрементируемого поля, так как оно упростит обработку данных при последующей эксплуатации базы данных.
Поскольку стандарт языка SQL не предполагает наличия автоинкрементируемых полей, то не существует и единого подхода. Здесь мы покажем, как это реализуется в MS SQL Server. Оператор
отключает (значение ON) или включает (OFF) использование автоинкремента. Поэтому чтобы вставить строку со значением 15 в поле code, нужно написать:
Обратите внимание, что список столбцов в этом случае является обязательным, то есть мы не можем написать так:
ни, тем более, так:
В последнем случае в пропущенный столбец code значение не может быть подставлено автоматически, так как автоинкрементирование отключено.
Важно отметить, что если значение 15 окажется максимальным в столбце code, то далее нумерация продолжится со значения 16. Естественно, если включить автоинкрементирование:
Наконец, рассмотрим пример вставки данных из таблицы Product в таблицу Product_Inc, сохранив значения в поле code:
По поводу автоинкрементируемых столбцов следует добавить следующее. Пусть последнее значение в поле code было равно 16, после чего строка с этим значением была удалена. Какое значение будет в этом столбце после вставки новой строки? Правильно, 17, так как последнее значение счетчика сохраняется, несмотря на удаление строки, его содержащей. Поэтому нумерация значений в результате удаления и добавления строк не будет последовательной. Это является еще одной причиной для вставки строки с заданным (пропущенным) значением в автоинкрементируемом столбце.
| Страницы: | 1 | 2 | 3 | 4 | 5 |
Insert в MySQL — добавление данных в таблицу
В статье расскажем, для чего нужна команда INSERT в MySQL и покажем как ей пользоваться на десяти практических примерах.
Зачем нужна команда Insert
Команда INSERT используется для того, чтобы вставлять новые данные в таблицы. Общий и наиболее часто используемый синтаксис выглядит так:
INSERT into table_name [(column1, [, column2] . )] values (values_list)
Минимальный набор обязательных параметров: название таблицы и список значений. Но часто также указывают список столбцов, в которые нужно вставить данные. Есть еще много других необязательных параметров и возможностей. Самую основную часть из них мы посмотрим в этой статье.
Создаем базу MySQL в облаке
Прежде чем начать работать с командой Insert, нам нужна база данных MySQL. Чтобы не заниматься долгой установкой и настройкой, мы создадим управляемую БД на платформе Selectel. Если сервер MySQL у вас уже установлен, можете сразу переходить к следующему разделу.
Заходим в личный кабинет, в разделе «Облачная платформа» переходим к «Базам данных». Нажимаем кнопку «Создать кластер».

На следующем экране выбираем параметры новой базы. Выбираем «СУБД» — MySQL. Далее необходимо выбрать конфигурацию сервера: нам будет достаточно 2 vCPU, 4 ГБ оперативной памяти и 32 ГБ диска. Обратите внимание на раздел «Сеть» — у вас должна быть выбрана публичная сеть, чтобы к базе данных можно было подключиться из интернета. Остальные параметры можно оставить по умолчанию.

Немного подождем, пока сервер создается. Когда он перейдет в статус ACTIVE, выберите его и зайдите в раздел настроек. Сначала перейдем на вкладку «Пользователи» и создадим нового пользователя, который сможет подключаться к базе данных. Не забудьте записать имя пользователя и пароль, они будут нужны для подключения.

Затем перейдем на следующую вкладку — «Базы данных». Нам нужно создать базу, в которой мы будем работать. Для этого нажмем кнопку «Создать базу данных». Запишите название созданной БД, оно нам будет нужно для подключения.

Когда база создастся, нужно дать нашему пользователю права на нее. На этой же вкладке нажмем кнопку «Добавить» и выберем недавно созданного пользователя.

Все, БД настроена и к ней можно подключаться. Чтобы узнать параметры подключения, перейдите на вкладку «Настройки» и там в самом низу в разделе «Подключение» указаны нужные параметры. Вы можете пользоваться консольным клиентом или любой графической утилитой. Мы будем показывать на примере консольного клиента, поэтому строка для подключения будет выглядеть вот так:
mysql --host=109.71.10.30 \ --port=6033 \ --user=chrystal \ --password \ --database=db
После ввода этой команды консоль попросит нас ввести пароль. Вот и все, мы подключились к БД.
Структура таблиц для примеров
Все дальнейшие команды мы будем показывать на простом примере из трех таблиц. Допустим, мы — сеть фруктовых магазинов. У нас есть таблица со списком магазинов, таблица со списком товаров (фруктов) и таблица, в которой мы записываем какой фрукт в каком магазине продается и по какой цене.
С помощью команды Insert мы будем вставлять в эти таблицы новые данные разными способами. Итак, вот описание наших таблиц и начальные данные в них:
+----+------------------+--------------+ | id | name | address | +----+------------------+--------------+ | 1 | Магазин 1 | Адрес 1 | | 2 | Магазин 2 | Адрес 2 | | 3 | Магазин 3 | Адрес 3 | +----+------------------+--------------+
+----+------------------+ | id | name | +----+------------------+ | 1 | Яблоко | | 2 | Мандарин | | 3 | Банан | +----+------------------+
- sale, таблица наличия товаров и цены:
+----------+----------+-------+-------+ | store_id | fruit_id | price | count | +----------+----------+-------+-------+ | 1 | 3 | 60 | 20 | | 2 | 2 | 80 | 10 | | 3 | 1 | 120 | 12 | +----------+----------+-------+-------+
Пример 1: базовое использование команды INSERT
Начнем с самого простого использования команды INSERT в MySQL. Добавим новый фрукт в справочник фруктов. Команда будет выглядеть так:
INSERT INTO fruits VALUES (4, 'Апельсин');
Проверяем таблицу фруктов и видим, что появилась новая запись:
+----+------------------+ | id | name | +----+------------------+ | 1 | Яблоко | | 2 | Мандарин | | 3 | Банан | | 4 | Апельсин | +----+------------------+
Мы не указывали названия столбцов, в которые хотим вставить данные. Поэтому они вставлялись по порядку, как они расположены в таблице. Поэтому нам нужно было указывать значения для всех столбцов, которые есть в таблице, даже если мы не хотим их заполнять.
Но если в таблице много столбцов, нам может быть неудобно указывать много пустых значений. Поэтому существует другой способ записи, в котором нужно явно указывать названия столбцов.
INSERT INTO stores (id, name) VALUES (4, 'Магазин 4');
Обратите внимание, что в таблице stores у нас еще есть столбец с адресом, но мы его не указали. Посмотрим, что вставилось в таблицу:
+----+------------------+--------------+ | id | name | address | +----+------------------+--------------+ | 1 | Магазин 1 | Адрес 1 | | 2 | Магазин 2 | Адрес 2 | | 3 | Магазин 3 | Адрес 3 | | 4 | Магазин 4 | NULL | +----+------------------+--------------+
Мы видим указанные нами значения, а в поле address вставилось значение NULL.
Пример 2: вставка нескольких строк
За один запрос можно добавлять сразу несколько элементов. Например, мы хотим добавить три новых фрукта. Вместо того, чтобы писать три отдельных команды INSERT, мы воспользуемся вот таким способом записи:
INSERT INTO fruits VALUES (5, 'Киви'), (6, 'Виноград'), (7, 'Груша');
Посмотрим результат. Видим, что появилось сразу три новых записи:
+----+------------------+ | id | name | +----+------------------+ | 1 | Яблоко | | 2 | Мандарин | | 3 | Банан | | 4 | Апельсин | | 5 | Киви | | 6 | Виноград | | 7 | Груша | +----+------------------+
Пример 3: использование SET
В команде INSERT мы обычно указываем отдельно столбцы и отдельно значения. Но есть способ записи, похожий на команду UPDATE: указывать столбцы и их значения через символ равенства. Такой способ может быть удобен, когда в таблице много полей и значений. Так сразу видно, в какое поле какое значение подставляется.
INSERT INTO sale SET store_id=1, fruit_id=1, price=89, count=3;
Проверим, что числа вставились именно в те столбцы, которые мы указали:
+----------+----------+--------+-------+ | store_id | fruit_id | price | count | +----------+----------+--------+-------+ | 1 | 3 | 60 | 20 | | 2 | 2 | 80 | 10 | | 3 | 1 | 120 | 12 | | 1 | 1 | 89 | 3 | +----------+----------+--------+-------+
Пример 4: вставка с выражением
Во всех предыдущих примерах мы указывали явное значение для столбца. Но в MySQL можно использовать арифметические выражения, например сумму, разность, умножение и так далее. Допустим, мы хотим добавить запись в таблицу sale о том что в магазине № 2 продаются апельсины по 137 рублей. Но потом мы решаем, что хотим сделать скидку 6%. Чтобы не высчитывать ее самим, мы можем использовать такой запрос:
INSERT INTO sale VALUES (2, 4, 137*0.94, 5);
Мы умножаем 137 рублей на 0.94, это и есть скидка 6%. Проверим что у нас получилось:
+----------+----------+--------+-------+ | store_id | fruit_id | price | count | +----------+----------+--------+-------+ | 1 | 3 | 60 | 20 | | 2 | 2 | 80 | 10 | | 3 | 1 | 120 | 12 | | 1 | 1 | 89 | 3 | | 2 | 4 | 128.78 | 1 | +----------+----------+--------+-------+
Пример 5: вставка данных из другой таблицы
В качестве источника данных для вставки можно использовать другую таблицу. Предположим, у нас есть таблица fruits_new, где хранится список фруктов, которые мы заказали у поставщиков, но эти фрукты еще не продаются в наших магазинах. И вот наконец-то нам привезли два новых фрукта, которые мы так давно ждали. Но вместо того, чтобы переписывать эти названия в команду INSERT, мы можем просто использовать таблицу fruits_new и загружать данные из нее. Для этого нам понадобится оператор SELECT:
INSERT INTO fruits SELECT * FROM fruits_new WHERE >Обратите внимание, что мы не указываем названия столбцов: из какого взять и в какой вносить. Поэтому такой способ подойдет только если структура таблиц одинакова, или в таблице-источнике меньше столбцов. Чаще всего используется другой синтаксис, когда столбцы указаны явно:
INSERT INTO fruits (name, id) SELECT name, id FROM fruits_new WHERE >Проверим результат. После выполнения этих двух команд у нас должно появиться две новых строки:
+----+------------------+ | id | name | +----+------------------+ | 1 | Яблоко | | 2 | Мандарин | | 3 | Банан | | 4 | Апельсин | | 5 | Киви | | 6 | Виноград | | 7 | Груша | | 8 | Ананас | | 9 | Вишня | +----+------------------+
Пример 6: вставка значения по умолчанию
Обычно, если в MySQL для столбца не указано значение, то команда INSERT INTO подставляет NULL. Но если при создании таблицы у этого столбца было указано значение по умолчанию (default), тогда подставится именно оно. В нашей таблице sale у столбца count значение по-умолчанию равно единице. Проверим это, вставив новую запись без указания этого столбца:
INSERT INTO sale (store_id, fruit_id, price) VALUES(4, 7, 50);
Проверяем результат. Мы не указывали значение для столбца count, но автоматически подставлилось значение 1.
+----------+----------+--------+-------+ | store_id | fruit_id | price | count | +----------+----------+--------+-------+ | 1 | 3 | 60 | 20 | | 2 | 2 | 80 | 10 | | 3 | 1 | 120 | 12 | | 1 | 1 | 89 | 3 | | 2 | 4 | 128.78 | 5 | | 4 | 7 | 50 | 1 | +----------+----------+--------+-------+
Пример 7: вставка или обновление при дубликате
В MySQL нельзя добавить строку в таблицу, у которой дублируется первичный ключ (primary key). В наших таблицах stores и fruits поле id — это первичный ключ. Поэтому если мы попробуем добавить в таблицу fruit значение с то MySQL выдаст ошибку.
Но существует похожая на INSERT команда — REPLACE, которая умеет перезаписывать значения. Она работает как INSERT и UPDATE одновременно: если в таблице еще нет записи с таким первичным ключом, команда создаст новую запись; а если уже есть — заменит ее.
REPLACE INTO fruits VALUES (1, 'Лимон');
Проверяем результат и видим, что вместо яблока у нас появился лимон с тем же идентификатором.
+----+------------------+ | id | name | +----+------------------+ | 1 | Лимон | | 2 | Мандарин | | 3 | Банан | | 4 | Апельсин | | 5 | Киви | | 6 | Виноград | | 7 | Груша | | 8 | Ананас | | 9 | Вишня | +----+------------------+
Пример 8: игнорирование ошибки при вставке
Продолжим предыдущий пример. Допустим, записи в нашу таблицу вставляет бэкенд-сервис приложения. Мы хотим, чтобы сервис попробовал вставить новую запись, но если такой первичный ключ уже существует — ничего не обновлял и просто шел выполнять другой код. Но при совпадении ключей MySQL выдаст ошибку, а код на бэкенде прервется и ее нужно будет обрабатывать в сервисе. Гораздо проще добавить к команде INSERT ключевое слово IGNORE, чтобы при совпадении первичного ключа MySQL не генерировал ошибку:
INSERT IGNORE INTO stores VALUES (1, 'Магазин 10', 'Адрес 10');
Обратите внимание на сообщение, которое выдает MySQL, оно будет примерно таким: Query OK, 0 rows affected, 1 warning. Это значит, что запрос выполнился успешно, при этом он не затронул ни одну строки и есть одно предупреждение. Проверим результат: видим, что новых магазинов не появилось, а текущие не изменились.
+----+------------------+--------------+ | id | name | address | +----+------------------+--------------+ | 1 | Магазин 1 | Адрес 1 | | 2 | Магазин 2 | Адрес 2 | | 3 | Магазин 3 | Адрес 3 | | 4 | Магазин 4 | NULL | +----+------------------+--------------+
Пример 9: вставка записи в определенные партиции
Если таблица разбита на партиции, то при вставке данных можно сразу указать, в какой именно раздел вставлять запись. Наша таблица sales разбита на несколько партиций согласно условию:
- p0 для записей, у которых count от 0 до 100
- p1 для записей, у которых count от 101 до 150.
Чтобы вставить данные в первую партицию, воспользуемся командой:
INSERT INTO sale PARTITION (p0) VALUES (1, 9, 130, 10);
Кроме того, в одной команде мы можем вставлять данные сразу в несколько партиций. Это делается так:
INSERT INTO sale PARTITION (p0, p1) VALUES (4, 8, 90, 10), (3, 7, 50, 120);
Пример 10: изменение приоритета
В некоторых движках таблиц MySQL (например, в MyISAM, MEMORY и MERGE) можно изменить приоритет вставки данных. Например, можно сделать так, что если таблицу считывает команда SELECT, то команда INSERT будет ждать ее завершения. Это делается с помощью ключевого слова LOW_PRIORITY:
INSERT LOW_PRIORITY INTO sale VALUES (1, 6, 40, 3);
Если же нужно наоборот поднять приоритет, используется такая команда:
INSERT HIGH_PRIORITY INTO sale VALUES (1, 6, 40, 3);
Но нужно иметь ввиду, что если к таблице активно идут SELECT-запросы, то команда INSERT с низким приоритетом может ждать своей очереди довольно долго.
Заключение
Мы рассмотрели команду INSERT и познакомились с десятью самыми основными способами ее использования. Вы узнали, как с помощью SQL команды можно добавить новую строку в таблицу или обновить существующую. Зная эти основы, вы можете начать писать INSERT-запросы для своей структуры БД.
ALTER TABLE — изменение таблицы в SQL
Работа с командой UPDATE — как обновить данные в таблице MySQL
Зарегистрируйтесь в панели управления
И уже через пару минут сможете арендовать сервер, развернуть базы данных или обеспечить быструю доставку контента.
Запрос MySQL INSERT INTO: как добавить строку в таблицу (пример)
ВСТАВИТЬ В используется для хранения данных в таблицах. Команда INSERT создает в таблице новую строку для хранения данных. Данные обычно предоставляются прикладными программами, которые работают поверх базы данных.
Основной синтаксис
Давайте посмотрим на основной синтаксис команды INSERT INTO MySQL:
INSERT INTO `table_name`(column_1,column_2. ) VALUES (value_1,value_2. );
ВОТ
- INSERT INTO `table_name` — это команда, которая сообщает серверу MySQL добавить новую строку в таблицу с именем `table_name`.
- (column_1,column_2,…) указывает столбцы, которые будут обновлены в новой строке MySQL.
- VALUES (value_1,value_2,…) определяет значения, которые будут добавлены в новую строку.
При предоставлении значений данных для вставки в новую таблицу следует учитывать следующее:
- Строковые типы данных – все строковые значения должны быть заключены в одинарные кавычки.
- Числовые типы данных. Все числовые значения следует указывать напрямую, не заключая их в одинарные или двойные кавычки.
- Типы данных даты — значения даты заключаются в одинарные кавычки в формате «ГГГГ-ММ-ДД».
Пример:
Предположим, что у нас есть следующий список новых членов библиотеки, которые необходимо добавить в базу данных.
| Полные имена | Дата рождения | пол | Физический адрес | почтовый адрес | Контактный номер | Ваш e-mail |
|---|---|---|---|---|---|---|
| Леонард Хофштадтер | M | Вудкрест | 0845738767 | |||
| Шелдон Купер | M | Вудкрест | 0976736763 | |||
| Раджеш Кутраппали | M | Fairview | 0938867763 | |||
| Лесли Винкль | 14/02/1984 | M | 0987636553 | |||
| Говард Воловиц | 24/08/1981 | M | South Park | Почтовый ящик 4563 | 0987786553 | lwolowitz@email.me |
Давайте вставим данные один за другим. Начнем с Леонарда Хофштадтера. Мы будем рассматривать номер контакта как числовой тип данных и не заключать его в одинарные кавычки.
INSERT INTO `members` (`full_names`,`gender`,`physical_address`,`contact_number`) VALUES ('Leonard Hofstadter','Male','Woodcrest',0845738767);
Выполнение приведенного выше сценария удаляет 0 из контактного номера Леонарда. Это связано с тем, что значение будет рассматриваться как числовое значение, а ноль (0) в начале опускается, поскольку он не имеет значения.
Чтобы избежать таких проблем, значение должно быть заключено в одинарные кавычки, как показано ниже:
INSERT INTO `members` (`full_names`,`gender`,`physical_address`,`contact_number`) VALUES ('Sheldon Cooper','Male','Woodcrest', '0976736763');
В приведенном выше случае ноль (0) не будет отброшен.
Изменение порядка столбцов не влияет на запрос INSERT в MySQL, если правильные значения сопоставлены с правильными столбцами.
Запрос, показанный ниже, демонстрирует вышеизложенное.
INSERT INTO `members` (`contact_number`,`gender`,`full_names`,`physical_address`) VALUES ('0938867763','Male','Rajesh Koothrappali','Woodcrest');
В приведенных выше запросах столбец даты рождения пропущен. По умолчанию MySQL вставит значения NULL в столбцы, которые пропущены в запросе INSERT.
Давайте теперь вставим запись о Лесли, в которой указана дата рождения. Значение даты должно быть заключено в одинарные кавычки в формате «ГГГГ-ММ-ДД».
INSERT INTO `members` (`full_names`,`date_of_birth`,`gender`,`physical_address`,`contact_number`) VALUES ('Leslie Winkle','1984-02-14','Male','Woodcrest', '0987636553');
Все приведенные выше запросы указывали столбцы и сопоставляли их со значениями в операторе вставки MySQL. Если мы предоставляем значения для ВСЕХ столбцов в таблице, то мы можем исключить эти столбцы из запроса на вставку MySQL.
INSERT INTO `members` VALUES (9,'Howard Wolowitz','Male','1981-08-24', 'SouthPark','P.O. Box 4563', '0987786553', 'lwolowitz[at]email.me');
Давайте теперь воспользуемся Оператор SELECT для просмотра всех строк в таблице участника.
SELECT * FROM `members`;
| Количество членов | полные имена | пол | Дата рождения | Физический адрес | почтовый адрес | контактный_ номер | |
|---|---|---|---|---|---|---|---|
| 1 | Джанет Джонс | F | 21-07-1980 | Первая улица, участок № 4 | Частная сумка | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Джанет Смит Джонс | F | 23-06-1980 | Мелроуз 123 | NULL, | NULL, | jj@fstreet.com |
| 3 | Роберт Фил | M | 12-07-1989 | 3-я улица, 34 | NULL, | 12345 | rm@ttreet.com |
| 4 | Глория Уильямс | F | 14-02-1984 | 2-я улица, 23 | NULL, | NULL, | NULL, |
| 5 | Леонард Хофштадтер | M | NULL, | Вудкрест | NULL, | 845738767 | NULL, |
| 6 | Шелдон Купер | M | NULL, | Вудкрест | NULL, | 0976736763 | NULL, |
| 7 | Раджеш Кутраппали | M | NULL, | Вудкрест | NULL, | 0938867763 | NULL, |
| 8 | Лесли Винкль | M | 14-02-1984 | Вудкрест | NULL, | 0987636553 | NULL, |
| 9 | Говард Воловиц | M | 24-08-1981 | Южный парк | Почтовый ящик 4563 | 0987786553 | lwolowitz@email.me |
Обратите внимание, что в контактном номере Леонарда Хофштадтера удален ноль (0). В других контактных номерах в начале не опущен ноль (0).
Вставка в таблицу из другой таблицы
Команда INSERT также может использоваться для вставки данных в таблицу из другой таблицы. Основной синтаксис показан ниже.
INSERT INTO table_1 SELECT * FROM table_2;
Давайте теперь посмотрим на практический пример. Для демонстрационных целей мы создадим фиктивную таблицу категорий фильмов. Мы назовем новую таблицу категорий категории_архив. Сценарий, показанный ниже создает таблицу.
CREATE TABLE `categories_archive` ( `category_id` int(11) AUTO_INCREMENT, `category_name` varchar(150) DEFAULT NULL, `remarks` varchar(500) DEFAULT NULL, PRIMARY KEY (`category_id`))
Выполните приведенный выше сценарий, чтобы создать таблицу.
Давайте теперь вставим все строки из таблицы категорий в таблицу архива категорий. Сценарий, показанный ниже, помогает нам добиться этого.
INSERT INTO `categories_archive` SELECT * FROM `categories`;
Выполнение приведенного выше сценария вставляет все строки из таблицы категорий в таблицу архива категорий. Обратите внимание, что для работы сценария структуры таблиц должны быть одинаковыми. Более надежный сценарий — это сценарий, который сопоставляет имена столбцов в таблице вставки с именами в таблице, содержащей данные.
Запрос, показанный ниже, демонстрирует его использование.
INSERT INTO `categories_archive`(category_id,category_name,remarks) SELECT category_id,category_name,remarks FROM `categories`;
Выполнение запроса SELECT
SELECT * FROM `categories_archive`
дает следующие результаты, показанные ниже.
| ид_категории | category_name | замечания |
|---|---|---|
| 1 | комедия | Фильмы с юмором |
| 2 | Романтический | Любовные истории |
| 3 | Эпический | Сюжетные древние фильмы |
| 4 | Ужас | NULL, |
| 5 | Научная фантастика | NULL, |
| 6 | Триллер | NULL, |
| 7 | Действие | NULL, |
| 8 | Романтическая комедия | NULL, |
| 9 | Мультфильмы | NULL, |
| 10 | Мультфильмы | NULL, |
Пример PHP: вставка в таблицу MySQL
Функция mysqli_query используется для выполнения SQL запросы.
Функция SQL-вставки в таблицу может использоваться для выполнения следующих типов запросов:
- Вставить
- Выберите
- Обновление ПО
- удалять
Он имеет следующий синтаксис.
mysqli_query($db_handle,$query);
«mysqli_query(…)» — это функция, выполняющая SQL-запросы.
«$query» — SQL-запрос, который необходимо выполнить.
«$link_identifier» не является обязательным, его можно использовать для передачи ссылки на подключение к серверу.
Пример
$servername = "localhost"; $username = "alex"; $password = "yPXuPT"; $dbname = "afmznf"; // Create connection $conn = mysqli_connect($servername, $username, $password, $dbname); // Check connection if (!$conn) < die("Connection failed: " . mysqli_connect_error()); >$sql= "INSERT INTO addkeyworddata(link, keyword)VALUES ('https://www.guru99.com/','1000')"; if (mysqli_query($conn, $sql)) < echo "New record created successfully".'
'; > else < echo "Error: " . $sql. "
" . mysqli_error($conn); > >
Итоги
- Команда INSERT используется для добавления новых данных в таблицу. MySql добавит новую строку после выполнения команды.
- Значения даты и строки должны быть заключены в одинарные кавычки.
- Числовые значения не обязательно заключать в кавычки.
- Команда INSERT также может использоваться для вставки данных из одной таблицы в другую.
- Учебное пособие по проектированию базы данных в СУБД: изучение моделирования данных
- Учебное пособие по MySQL Workbench: что такое, как установить и использовать
- Что такое база данных? Определение, значение, типы с примером
- Оператор MySQL SELECT с примерами
- MariaDB против MySQL – разница между ними
Transact-SQL — вставка данных

Кроме инструкции SELECT, которая была рассмотрена ранее, язык манипуляции данными DML (Data Manipulation Language) содержит три другие инструкции: INSERT, UPDATE и DELETE. Подобно инструкции SELECT эти три инструкции оперируют либо таблицами, либо представлениями. В этой статье рассматривается инструкция INSERT, а две другие инструкции рассматриваются в следующей статье.
Инструкция INSERT вставляет строки (или части строк) в таблицу. Существует две разные формы этой инструкции:
Первая форма инструкции позволяет вставить в таблицу одну строку (или часть ее). А вторая форма инструкции INSERT позволяет вставить в таблицу результирующий набор инструкции SELECT или хранимой процедуры, выполняемой посредством инструкции EXECUTE. Хранимая процедура должна возвращать данные для вставки в таблицу. Применяемая с инструкцией INSERT инструкция SELECT может выбирать значения из другой или той же самой таблицы, в которую вставляются данные, при условии совместимости типов данных соответствующих столбцов.
Для обеих форм тип данных каждого вставляемого значения должен быть совместимым с типом данных соответствующего столбца таблицы. Все строковые и временные данные должны быть заключены в кавычки; численные значения заключать в кавычки не требуется.
Вставка одной строки
Для обеих форм инструкции INSERT явное указание списка столбцов не является обязательным. Отсутствие списка столбцов равнозначно указанию всех столбцов таблицы.
Параметр DEFAULT VALUES вставляет значения по умолчанию для всех столбцов. В столбцы с типом данных TIMESTAMP или свойством IDENTITY по умолчанию вставляются значения, автоматически создаваемые системой. Для столбцов других типов данных вставляется соответствующее ненулевое значение по умолчанию, если таково имеется, или NULL в противном случае. Если для столбца значения NULL не разрешены и для него не определено значение по умолчанию, выполнение инструкции INSERT завершается ошибкой и выводится соответствующее сообщение.
В примере ниже показана вставка строк в таблицу Employee базы данных SampleDb, демонстрируя использование инструкции INSERT для вставки небольшого объема данных в базу данных:
USE SampleDb; INSERT INTO Employee VALUES (34990, 'Андрей', 'Батонов', 'd1'); INSERT INTO Employee VALUES (38640, 'Алексей', 'Васин', 'd3');
Существует два разных способа вставки значений в новую строку. Инструкция INSERT в примере ниже явно использует ключевое слово NULL и вставляет значение NULL в соответствующий столбец:
USE SampleDb; INSERT INTO Employee VALUES (34991, 'Андрей', 'Батонов', NULL);
Чтобы вставить значения в некоторые (но не во все) столбцы таблицы, обычно необходимо явно указать эти столбцы. Не указанные столбцы должны или разрешать значения NULL, или для них должно быть определено значение по умолчанию.
USE SampleDb; INSERT INTO Employee(Id, FirstName, LastName) VALUES (34992, 'Андрей', 'Батонов');
Предыдущие два примера равнозначны. В таблице Employee единственным столбцом, разрешающим значения NULL, является столбец DepartmentNumber, а для всех прочих столбцов это значение было запрещено предложением NOT NULL в инструкции CREATE TABLE.
Порядок значений в предложении VALUES инструкции INSERT может отличаться от порядка, указанного в инструкции CREATE TABLE. В таком случае их порядок должен совпадать с порядком, в котором соответствующие столбцы перечислены в списке столбцов. Ниже показан пример вставки данных в порядке, отличающемся от исходного:
USE SampleDb; INSERT INTO Employee(DepartamentNumber, LastName, Id, FirstName) VALUES ('d1', 'Батонов', 34993, 'Андрей');
Вставка нескольких строк
Вторая форма инструкции INSERT вставляет в таблицу одну или несколько строк, выбранных подзапросом. В примере ниже показана вставка строк в таблицу, используя вторую форму инструкции INSERT. В данном случае выполняется запрос по выборке номеров и имен отделов, расположенных в Москве, и загрузка полученного результирующего набора в новую таблицу, созданную ранее.
USE SampleDb; CREATE TABLE MoscowDepartment ( Number CHAR(4) NOT NULL, DepartmentName NCHAR(40) NOT NULL); INSERT INTO MoscowDepartment (Number, DepartmentName) SELECT Number, DepartmentName FROM Department WHERE Location = 'Москва';
Создаваемая в примере выше новая таблица MoscowDepartment имеет те же столбцы, что и существующая таблица Department, за исключением отсутствующего столбца Location. Подзапрос в инструкции INSERT выбирает в таблице Department все строки, для которых значение столбца Location равно ‘Москва’, которые затем вставляются в созданную в начале запроса новую таблицу.
В примере ниже показан еще один способ вставки строк в таблицу, используя вторую форму инструкции INSERT. В данном случае выполняется запрос на выборку табельных номеров, номеров проектов и дат начала работы над проектом для всех сотрудников с должностью ‘Менеджер’, которые работают над проектом p2 с последующей загрузкой полученного результирующего набора в новую таблицу, создаваемую в начале запроса:
USE SampleDb; CREATE TABLE ManagerTeam ( EmpId INT NOT NULL, ProjectNumber CHAR (4) NOT NULL, EnterDate DATE); INSERT INTO ManagerTeam (EmpId, ProjectNumber, EnterDate) SELECT EmpId, ProjectNumber, EnterDate FROM Works_on WHERE Job = 'Менеджер';
Перед вставкой строк с помощью инструкции INSERT таблицы MoscowDepartment и ManagerTeam (в примерах выше) были пустыми. Если же таблица уже существовала и содержала строки с данными, то к ней были бы добавлены новые строки.
Конструкторы значений таблицы и инструкция INSERT
Конструктор значений таблицы или строки (table (row) value constructor) позволяет вставить в таблицу несколько записей (строк) посредством инструкции языка DML, такой как, например, INSERT или UPDATE. В примере ниже показана вставка в таблицу нескольких строк, используя такой конструктор с помощью инструкции INSERT:
USE SampleDb; INSERT INTO Employee VALUES (34995, 'Андрей', 'Батонов', 'd1'), (38641, 'Алексей', 'Васин', 'd3'), (12590, 'Светлана', 'Рыжова', 'd3');
В этом примере ниже инструкция INSERT одновременно вставляет три строки в таблицу Department, используя конструктор значений таблицы. Как можно видеть, синтаксис этого конструктора довольно простой. Для вставки в таблицу строк с данными посредством конструктора значений таблицы нужно в круглых скобках перечислить значения каждой строки, разделяя как значения каждого списка, так и отдельные списки запятыми.
