Как добавить строку в таблицу mysql
Перейти к содержимому

Как добавить строку в таблицу mysql

  • автор:

Основные операции с данными

Для добавления данных в БД в MySQL используется команда INSERT , которая имеет следующий формальный синтаксис:

INSERT [INTO] имя_таблицы [(список_столбцов)] VALUES (значение1, значение2, . значениеN)

После выражения INSERT INTO в скобках можно указать список столбцов через запятую, в которые надо добавлять данные, и в конце после слова VALUES скобках перечисляют добавляемые для столбцов значения.

Например, пусть в базе данных productsdb есть следующая таблица Products:

CREATE DATABASE productsdb; USE productsdb; CREATE TABLE Products ( Id INT AUTO_INCREMENT PRIMARY KEY, ProductName VARCHAR(30) NOT NULL, Manufacturer VARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price DECIMAL NOT NULL );

Добавим в эту таблицу одну строку с помощью следующего кода:

INSERT Products(ProductName, Manufacturer, ProductCount, Price) VALUES ('iPhone X', 'Apple', 5, 76000);

В данно случае значения будут передаваться столбцам по позиции. То есть стобцу ProductName передается строка «iPhone X», столбцу Manufacturer — строка «Apple» и так далее.

Важно, чтобы между значениями и типами данных столбцов было соответствие. Так, столбец ProductName представляет тип varchar , то есть строку. Соответственно этому столбцу мы можем передать строковое значение в одинарных кавычках. А стобец ProductCount представляет тип int , то есть целое число, поэтому данному столбцу нужно передать целые числа, но никак не строки.

После удачного выполнения в MySQL Workbench в поле вывода должны появиться зеленый маркер и сообщение «1 row(s) affected»:

INSERT и добавление данных в MySQL

Необязательно при добавлении данных указывать значения абсолютно для всех столбцов таблицы. Например, в примере выше не указано значение для стобца Id. Но поскольку для данного столбца определен атрибут AUTO_INCREMENT , то его значение будет автоматически генерироваться.

Также мы можем опускать при добавлении такие столбцы, которые поддерживают значение NULL или для которых указано значение по умолчанию, то есть для них определены атрибуты NULL или DEFAULT . Так, в таблице Products столбец ProductCount имеет значение по умолчанию — число 0. Поэтому мы можем при добавлении опустить этот столбец, и ему будет передаваться число 0:

INSERT Products(ProductName, Manufacturer, Price) VALUES ('Galaxy S9', 'Samsung', 63000);

С помощью ключевых слов DEFAULT и NULL можно указать, что в качестве значения будет использовать значение по умолчанию или NULL соответственно:

INSERT Products(ProductName, Manufacturer, Price, ProductCount) VALUES ('Nokia 9', 'HDM Global', 41000, DEFAULT);
INSERT Products(ProductName, Manufacturer, Price, ProductCount) VALUES ('Nokia 9', 'HDM Global', 41000, NULL);

Множественное добавление

Также мы можем добавить сразу несколько строк:

INSERT Products(ProductName, Manufacturer, Price, ProductCount) VALUES ('iPhone 8', 'Apple', 51000, 3), ('P20 Lite', 'Huawei', 34000, 4), ('Galaxy S8', 'Samsung', 46000, 2);

В данном случае в таблицу будут добавлены три строки.

Как добавить запись в таблицу MySQL

В MySQL для добавления записей в таблицу используется команда INSERT.

Для того, что бы ответить на вопрос: Как добавить запись в таблицу MySQL ?

Рассмотрим общий синтаксис команды INSERT. А после этого разберем на примерах добавление данных в таблицу.

Синтаксис команды выглядит следующим образом:

INSERT [ LOW_PRIORITY | DELAYED ] [ IGNORE ]
[ INTO ] tbl_name [(col_name. )]
VALUES (expression. ),(. ).
INSERT [ LOW_PRIORITY | DELAYED ] [ IGNORE ]
[ INTO ] tbl_name
SET col_name = expression, col_name = expression, .
INSERT [ LOW_PRIORITY | DELAYED ] [ IGNORE ]
[ INTO ] tbl_name [(col_name. )]

Общие положения работы команды INSERT:

— Задает имя таблицы, в которую будет вставлена новая строка. На момент запуска команды INSERT таблица с таким именем должна существовать в базе данных.

— Если указан этот параметр, то вставка новой записи будет отложена до тех пор, пока другие сценарии не закончат чтение из этой таблицы. Надо отметить, что если таблица часто используется, то при указании этого параметра может пройти достаточно много времени, прежде чем данная команда будет выполнена.

— Если указан этот параметр, то после выполнения команды INSERT сценарий сразу же получит ответ от БД о успешной вставке новой записи, а запись будет вставлено только после завершения использования данной таблицы другим сценарием. Это может быть удобно, если требуется высокая скорость работы скрипта. Данный параметр работает только с таблицами типа ISAM и MyISAM. Следуем отметить, что если таблица, в которую происходит вставка записи, в данный момент не используется другими запросами, то команда INSERT DELAYED будет работать медленнее, нежели INSER. Так что рекомендуется использовать параметр DELAYED только при большой нагрузке на таблицу.

— Если некоторые поля таблицы имеют ключи PRIMARY или UNIQUE, и производится вставка новой строки, в которой эти поля имеют дублирующее значение, то действие команды аварийно завершается и выдается ошибка №1062 («Duplicate entry ‘val’ for key N»). Если в команде INSERT указано ключевое слово IGNORE, то вставка записей не прерывается, а строки с дублирующими значениями просто не вставляются.

Рассмотрим простой пример добавления данных в таблицу MySQL подробнее.

Как добавить запись в таблицу MySQL ?

Исходные данные:

У нас уже есть работающая MySQL в которой создана база данных и в ней создана таблица с именем ‘my_table’ и в таблице созданы поля: ‘ID’, ‘name’, ‘surname’, ‘bithday’, где:

  • ID — порядковый номер записи;
  • name — имя пользователя;
  • surname — фамилия;
  • bithday — день рождения.

Обратите внимание !

Название таблицы и полей береме в косые кавычки:

SQL INSERT INTO: примеры вставки строк в таблицу БД MySQL

SQL оператор 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, .

Создадим тестовую таблицу

Давайте создадим таблицу table1 со столбцами a, b, c в нашей MySQL базе данных:

CREATE TABLE `table1` ( `a` INT(11), `b` INT(11), `c` INT(11) );

Запрос на вставку строки

Простой запрос, который вставляет строку со столбцами 111, 222 и 333 выглядит так:

INSERT INTO table1 (a, b, c) VALUES (111, 222, 333);

Еще один способ сделать то же самое:

INSERT INTO table1 SET a=111, b=222, c=333;

Столбцы, которые вы не перечислите заполняются значениями по умолчанию, которые вы предусматриваете при создании таблицы, даже если это просто NULL.

У таблиц обычно есть поле id с первичным ключом (PRIMARY KEY) таблицы. Если этому полю установлено значение AUTOINCREMENT т.е. оно заполняется автоматически, то в таком случае вы не должны его перечислять в списке столбцов оператора INSERT.

Вставка без перечисления столбцов

Если количество значений, которые мы вставляем = количеству столбцов в таблице, то можно не перечислять столбцы, и наш запрос может выглядеть так:

INSERT INTO table1 VALUES (111, 222, 333);

Этот способ крайне не рекомендуется. Дело в том, что со временем вы можете менять таблицы, например добавлять в них новые столбцы, а это значит, что все запросы записанные таким способом просто перестанут работать и вам придется менять их по всему вашему приложению. Поэтому, навсегда забываем этот способ. Я его привел, только чтобы вы так не делали.

Вставка сразу нескольких строк с помощью INSERT INTO

Если нам нужно вставить несколько строк, то мы просто перечисляем группы значений через запятую выглядит это так:

INSERT INTO table1 (a, b, c) VALUES (1, 222, 333), (2, 555, 666), (3, 555, 333);

Таким образом мы вставили 3 строки в нашу таблицу table1. Их может быть и больше. В MySQL четкого предела нет, однако он все таки существует и зависит от параметра max_allowed_packet который ограничивает размер запроса. Если вы установите SET GLOBAL max_allowed_packet=524288000; то размер запроса будет ограничен 500MB но делайте это в очень крайнем случае. Обычно всегда можно найти решение и разделить 1 большой запрос, на несколько более мелких и вставлять например не больше 1000 строк за один цикл.

Как вставить значение из другой таблицы INSERT INTO . SELECT .

Допустим у нас есть еще одна таблица table2 которая по структуре точно такая же как и первая. Нам в таблицу table2 нужно вставить все строки из table1.

Вставляем значения из table1 в таблицу table2:

INSERT INTO table2 (a, b, c) SELECT a, b, c FROM table1;

Вам следует позаботиться об уникальности ключей, если они есть в таблице, в которую мы вставляем. Например при дублировании PRIMARY KEY мы получим следующее сообщение об ошибке:

/* ERROR 1062 (23000): Duplicate entry '100' for key 'PRIMARY' */

Если вы делаете не какую-то единичную вставку при переносе данных, а где-то сохраните этот запрос, например в вашем PHP скрипте, то всегда перечисляйте столбцы.

Как не рекомендуется делать (без перечисления столбцов):

INSERT INTO table2 SELECT * FROM table1;

Если у вас со временем изменится количество столбцов в таблице, то запрос перестанет работать. При выполнении запроса MySQL в лучшем случае просто будет возвращать ошибку:

/* Ошибка SQL (1136): Column count doesn't match value count at row 1 */

Либо еще хуже: значения вставятся не в те столбцы.

Вставка из другой таблицы с условием INSERT INTO . SELECT . WHERE .

А теперь представим, что нам нужно вставить только те строки из table1, у которых столбец «c» равен 333. Тогда наш запрос будет выглядеть так

INSERT INTO table2 (a, b, c) SELECT a, b, c FROM table1 WHERE c = 333;

То есть мы просто вставляем данные в таблицу, которые выбрали из другой таблицы при помощи обычного SELECT запроса

Теперь представим, что у нас в таблице table2 — 4 столбца, а в table1 — 3. При этом четвертый столбец в table2 обязательный. Чтобы выйти из этой ситуации, нужно передать какое-нибудь подходящее значение в этот лишний столбец. У нас чисто абстрактная задача, поэтому давайте передадим туда просто единицу.

INSERT INTO table2 (a, b, c, d) SELECT a, b, c, 1 FROM table1 WHERE c = 333;

Теперь в столбец d у нас записалась единица и проблема решена.

Вставка в определенный раздел INSERT INTO . PARTITION .

Если вам нужно вставить строки в определенный раздел таблицы, то нужно после таблицы указать PARTITION (название раздела), например так:

INSERT INTO table1 PARTITION (p1) VALUES(1, 2, 3);

Вставка в несколько разделов. Первая строка вставляется в раздел p1, а вторая в p2

INSERT INTO table1 PARTITION (p1, p2) VALUES(1, 2, 3), (4, 5, 6);

Вставка строк, некоторые из которых уже существуют в целевой таблице

Существование строк определяется по значению уникальных ключей. В зависимости от ситуации мы можем выбрать разные способы поведения при совпадении значений уникальных столбцов.

Игнорирование INSERT IGNORE INTO

Например если мы вставляем строку с PK = 1, и при этом в таблице уже есть PK = 1 то MySQL выдаст ошибку:

/* ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY' */

Выполнение запроса на этом прервется, однако нам в некоторых случаях хотелось бы просто вставить данные, игнорируя ошибки. В этом нам поможет INSERT IGNORE INTO:

INSERT IGNORE INTO table1 (a, b, c) VALUES (1, 222, 333), (2, 555, 666), (3, 555, 333);

Просто добавляем IGNORE в наш запрос и ошибки будут игнорироваться

Вставка с заменой существующих значений REPLACE INTO

REPLACE работает также INSERT, но если совпадают уникальные ключи, то старая строка (или строки!) удаляется до вставки новой.

В таком случае наш пример выглядит следующим образом:

REPLACE INTO table1 (a, b, c) VALUES (1, 222, 333), (2, 555, 666), (3, 555, 333);

Обновление некоторых полей, при существовании строк ON DUPLICATE KEY UPDATE

При совпадении ключей, мы можем также заменить некоторые или все поля в строке.

Наш запрос будет выглядеть так:

INSERT INTO table1 (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=VALUES(c);

В данном примере если у нас какой-то уникальный ключ совпадает, то мы не производим вставку, а обновляем существующую строку или строки путем присваивания столбцу «c» значения, которое у нас перечислено в VALUES.

Иными словами, если ключ совпадает, то мы просто обновим данные столбца «с» а остальные столбцы трогать не будем.

Иногда нам нужно при совпадении ключей обновить все значения. Этом можно сделать просто перечислив все столбцы:

INSERT INTO table1 (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE a=VALUES(a), b=VALUES(b), c=VALUES(c);

При обновлении столбцов мы также можем использовать разные выражения, например:

INSERT INTO table1 (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);

Выражения для вставляемых значений в VALUES

При вставке значений, мы можем использовать выражения и даже использовать в своих выражениях значения других столбцов.

Пример использования выражений:

INSERT INTO table1 (a, b, c) VALUES (1, 222, 333 + a), (2, 555, 666 + b);

Таким образом мы для формирования столбца «c» использовали столбцы «a» и «b».

Приоритет вставки INSERT LOW_PRIORITY / HIGH_PRIORITY

Установление приоритета нужно для решение проблем с конкурентными вставками. При вставках происходит блокировка строк и если 2 INSERT запроса требуют блокировки одних и тех же строк, для своего выполнения, то иногда может потребоваться повысить или понизить приоритет некоторых запросов, по отношению к другим. Это можно сделать указав приоритет LOW_PRIORITY или HIGH_PRIORITY

Наш запрос будет выглядеть так для LOW_PRIORITY:

INSERT LOW_PRIORITY INTO table1 (a, b, c) VALUES(1, 2, 3);
INSERT HIGH_PRIORITY INTO table1 (a, b, c) VALUES(1, 2, 3);

Свежие записи

  • SQL UPDATE: примеры обновления строк в таблице
  • PHP: substr и мощные альтернативы, чтобы вырезать часть строки
  • Степень в C, C++ и С#: как возвести число в любую степень, побитовые операции
  • Скачать ShowKeyPlus: ссылка на последнюю официальную версию, скачивание, установка
  • Как создать файл в Linux: 12 способов
  • SQL INSERT INTO: примеры вставки строк в таблицу БД MySQL
  • PHP: str_replace — замена или удаление подстроки в строке
  • Функция date() в php: распространенные форматы, примеры, советы
  • cURL в PHP: примеры POST, GET запросов с headers, cookie, JSON и многопоточностью
  • JSON в PHP: примеры json_encode, json_decode, работа с кириллицей и utf-8
  • Файл gitignore — примеры и документация
  • Сортировка массивов в php: ksort, asort и прочие sort’ы
  • jQuery onclick: как выполнить код при клике на кнопку
  • 500 Internal Server Error — в чем причина?
  • SMTP от Yandex: как отправить письма из PHP — пример настроек
  • No such file or directory — в чем причина?
  • Как получить первый элемент массива в php
  • Cтроку в массив по разделителю в PHP: explode, str_split, strtok — что выбрать?
  • 301 редирект на https с www через htaccess
  • Как в php добавить к массиву другой массив?
  • 301 редирект на https без www с помощью htaccess
  • Регулярные выражения в PHP
  • PHP json_decode — как декодировать результат в массив?
  • Yii2 ActiveRecord шпаргалка по составлению запросов
  • Поиск подстроки в строке с помощью PHP
  • Отправка почты на php
  • Как подключить php код в html
  • Конвертировать массив в строку при помощи PHP
  • Подключение одного php файла в другой
  • Подборка ссылок для веб-разработчика
  • Проблема с кириллицей в PHPWord

SQL INSERT INTO

Команда INSERT добавляет строки в таблицу или представление основной таблицы.

Синтаксис команды Sql INSERT INTO

Синтаксис команды Insert

Основные ключевые слова и параметры команды INSERT

  • schema — идентификатор полномочий, обычно совпадающий с именем некоторого пользователя
  • table view — имя таблицы, в которую строки должны быть вставлены; если указано представление, то строки вставляются в основную таблицу представления
  • subquery_1 — подзапрос, который сервер обрабатывает тем же самым способом как представление
  • column — столбец таблицы или представления, в который для каждой вставленной строки вводится значение из фразы VALUES или подзапроса; если один из столбцов таблицы опускается из этого списка, значением столбца для вставленной строки является значение по умолчанию столбца, определенное при создании таблицы. Если полностью опускается список столбца, предложение VALUES или запрос должен определить значения для всех столбцов в таблице
  • VALUES — определяет строку значений, которые будут вставлены в таблицу или представление; значение должно быть определено в предложении VALUES для каждого столбца в списке столбцов
  • subquery_2 — подзапрос, который возвращает строки, вставляемые в таблицу; выборочный список этого подзапроса должен иметь такое же количество столбцов, как в списке столбцов утверждения INSERT

Утверждение INSERT с фразой VALUES добавляет одиночную строку к таблице. Эта строка содержит значения, определенные фразой VALUES. Утверждение INSERT с подзапросом вместо фразы VALUES добавляет к таблице все строки, возвращенные подзапросом. Сервер обрабатывает подзапрос и вставляет каждую возвращенную строку в таблицу. Если подзапрос не выбирает никакие строки, сервер не вставляет никакие строки в таблицу.

Подзапрос может обратиться к любой таблице или представлению, включая целевую таблицу утверждения INSERT. Сервер назначает значения полям в новых строках, основанных на внутренней позиции столбцов в таблице и порядке значений фразы VALUES или в списке выбора запроса. Если какие-либо столбцы пропущены в списке столбцов, сервер назначает им значения по умолчанию, определенные при создании таблицы.

Если любой из этих столбцов имеет NOT NULL ограничение то сервер возвращает ошибку, указывающую, что ограничение было нарушено и отменяет утверждение INSERT. При выдаче утверждения INSERT включается любой INSERT — триггер, определенный на таблице.

INSERT INTO

INSERT INTO. Пример 1

INSERT INTO dept VALUES (50, «ПРОДУКЦИЯ», «САН-ФРАНЦИСКО»);

INSERT INTO Customers (city, cname, cnum) VALUES (‘London’, ‘Hoffman’, 2001);

INSERT INTO. Пример 2

Нижеприведенная команда копирует данные сотрудников фирмы, комиссионные которых превышают 25% от дохода в таблицу bonus:

INSERT INTO bonus SELECT ename, job, sal, comm FROM emp WHERE comm > 0.25 * sal;

INSERT INTO. Пример 3

Если нужно вставить NULL-значение, необходимо указать его как обычное значение следующим образом:

INSERT INTO Salespeople VALUES (1001,’Peel’,NULL,12);

INSERT INTO. Пример 4

Команду INSERT можно применить для того, чтобы извлечь значения из одной таблицы и разместить их в другой, воспользовавшись для этого запросом. Для этого достаточно заменить предложение VALUES на соответствующий запрос:

INSERT INTO Londonstaff SELECT * FROM Salespeople WHERE city = ‘London’;

MySQL INSERT

Для вставки новых строк в базу данных MySQL используется команда INSERT, примеры команды INSERT приведены ниже:

MySQL INSERT INTO. Пример 1

Вставка новой строки в таблицу table_name.

INSERT INTO table_name VALUES (‘1’, ‘165’, ‘0’, ‘name’);

MySQL INSERT INTO. Пример 2

Вставка новой строки в таблицу table_name с указанием вставки данных в нужные нам колонки.

INSERT INTO table_name VALUES (‘1’, ‘165’, ‘0’, ‘name’);

В базе данных MySQL имеется возможность вставлять множество новых строк, используя одну команду INSERT.

MySQL INSERT INTO Пример 3

Вставка несколько строк в таблицу table_name.

INSERT INTO table_name (tbl_id, chislo, chislotwo, name) VALUES (‘1’, ‘159’, ’34’, ‘name1’), (‘2′, ’14’, ’61’, ‘name2’), (‘3’, ‘356’, ‘8’, ‘name3’);

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *