В этом третьем выпуске Основы серии MySQL для начинающих будет выделен INSERT синтаксис для заполнения таблиц данными. Обязательно посетите оба сообщения в блоге: СОЗДАТЬ базу данных, пользователя и таблицу - Простые примеры с MySQL вместе с ALTER TABLE: Примеры с MySQL - серия для начинающих, чтобы получить обзор материала, уже рассмотренного в этой серии.

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

Для этих упражнений я буду использовать Xubuntu Linux 16.04.2 LTS (Xenial Xerus) и MySQL 5.7.20.

Цели.

  • Выполните одиночный INSERT, используя mysql в интерактивном режиме из командной строки.
  • Выполните несколько INSERTS с использованием mysql в интерактивном режиме из командной строки.
  • Используйте mysql в пакетном режиме для INSERT нескольких строк через .sql исходный файл.

Вставить синтаксис

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

INSERT INTO table_name (optional comma-separated list of column names)
 VALUES (list of values to insert) or
 [multiple lists of values
 (list of values to insert),
 (list of values to insert),
 (list of values to insert),]
 etc…;

Одиночные вставки

Чтобы INSERT одну запись интерактивно из командной строки, можно использовать следующий синтаксис:

mysql> INSERT INTO friends(f_first_name, f_last_name, f_cell_phone, f_age)
 -> VALUES(‘John’,’Tom’,’318–767–8818',32);
 Query OK, 1 row affected (0.08 sec)

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

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

mysql> SELECT * FROM friends 
 -> WHERE f_last_name = ‘Tom’;
 + — — — — — -+ — — — — — — — + — — — — — — -+ — — — — — — — + — — — -+ — — — — +
 | friend_id | f_first_name | f_last_name | f_cell_phone | f_age | f_bday |
 + — — — — — -+ — — — — — — — + — — — — — — -+ — — — — — — — + — — — -+ — — — — +
 | 1 | John | Tom | 318–767–8818 | 32 | NULL |
 + — — — — — -+ — — — — — — — + — — — — — — -+ — — — — — — — + — — — -+ — — — — +
 1 row in set (0.04 sec)

NULL присутствует в столбце f_bday. Так что же дает?

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

Больше об исключении имен столбцов и / или значений будет по мере прохождения этого сообщения в блоге.

Множественные вставки

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

mysql> INSERT INTO friends(f_first_name, f_last_name, f_cell_phone, f_age, f_bday)
 -> VALUES
 -> (‘John’,’Roberts’,’555–867–5309', 36, ‘1981–04–17’),
 -> (‘Billy’,’Bogus’,’777–383–2828', 44, ‘1973–08–03’),
 -> (‘Jennifer’,’Kelly’,’979–191–6652',39, ‘1978–10–16’);
 Query OK, 3 rows affected (0.07 sec)
 Records: 3 Duplicates: 0 Warnings: 0

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

Информационная строка:
Records: number Duplicates: number Warning: number
Вышеупомянутый INSERT возвращает информационную строку, интерпретацию которой я напрямую передаю из официальной документации (см. ссылку здесь):
Records указывает количество строк, обработанных оператором. (Это не обязательно количество фактически вставленных строк, потому что Дубликаты могут быть отличными от нуля.) Дубликаты указывают количество строк, которые не могут быть вставлены, потому что они будут дублировать некоторое существующее уникальное значение индекса. Предупреждения указывают на количество попыток вставить значения столбца, которые были каким-то образом проблематичными. Предупреждения могут возникать при любом из следующих условий. »
(Условия предупреждений см. В официальной документации .)

Значения по умолчанию.

Давайте попробуем один INSERT без списка имен столбцов в скобках:

mysql> INSERT INTO friends
 -> VALUES (‘Mark’, ‘Harmon’, ‘567–733–0833’, 28, ‘1989–06–27’);
 ERROR 1136 (21S01): Column count doesn’t match value count at row 1

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

Для этого я использую ключевое слово DEFAULT для значения столбца friend_id. Поскольку этот столбец имеет атрибут AUTO_INCREMENT, он автоматически INSERT будет следующим доступным последовательным значением.

mysql> INSERT INTO friends VALUES (DEFAULT, ‘Mark’, ‘Harmon’, ‘567–733–0833’, 28, ‘1989–06–27’);
 Query OK, 1 row affected (0.02 sec)

Запрос значения f_first_name для Mark возвращает полную строку данных со значением friend_id столбца 5.

mysql> SELECT * FROM friends WHERE f_first_name = ‘Mark’;
 + — — — — — -+ — — — — — — — + — — — — — — -+ — — — — — — — + — — — -+ — — — — — — +
 | friend_id | f_first_name | f_last_name | f_cell_phone | f_age | f_bday |
 + — — — — — -+ — — — — — — — + — — — — — — -+ — — — — — — — + — — — -+ — — — — — — +
 | 5 | Mark | Harmon | 567–733–0833 | 28 | 1989–06–27 |
 + — — — — — -+ — — — — — — — + — — — — — — -+ — — — — — — — + — — — -+ — — — — — — +
 1 row in set (0.00 sec)

Обязательно посетите страницу Best Of на моем сайте Digital Owl’s Prose, где собрана коллекция моих лучших сообщений в блоге.

Пакетный режим для нескольких пластин

Наконец, я расскажу о своем любимом методе объемных вставок. Использование mysql в пакетном режиме.
У меня есть файл batch_insert.sql, содержащий эти вставки:

INSERT INTO friends(f_first_name, f_last_name, f_cell_phone, f_age, f_bday)
 VALUES
 (‘Jeremy’, ‘Hall’, ‘777–272–1717’,40 , ‘1977–02–07’),
 (‘Josh’, ‘Remey’, ‘727–213–7119’,40 , ‘1977–03–17’),
 (‘Jenny’, ‘Marcum’, ‘543–179–1548’,37 , ‘1980–09–27’),
 (‘Mike’, ‘Comb’, ‘118–972–1919’,30 , ‘1987–10–05’),
 (‘Thurmon’, ‘Docker’, ‘393–392–1010’,25 , ‘1992–08–19’),
 (‘Milton’, ‘Hammerfast’, ‘318–272–0797’,41 , ‘1976–05–11’),
 (‘Nikki’, ‘Vernon’, ‘548–498–9949’,28 , ‘1989–01–31’),
 (‘Avis’, ‘Pearl’, ‘509–292–8787’,64 , ‘1953–07–04’);

Чтобы выполнить этот .sql файл, просто поставьте перед именем файла префикс либо \., либо source, как показано ниже.

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

mysql> source /my_dir/my_system_user/My_Folder/sub_folder/batch_insert.sql
 Query OK, 8 rows affected (0.06 sec)
 Records: 8 Duplicates: 0 Warnings: 0

Для визуального подтверждения я выполняю простой запрос SELECT только для столбца f_first_name (Примечание: в таблице уже есть дополнительные имена, поэтому в результирующем наборе будет более 8 строк.),

mysql> SELECT f_first_name FROM friends;
 + — — — — — — — +
 | f_first_name  |
 + — — — — — — — +
 | John          |
 | John          |
 | Billy         |
 | Jennifer      |
 | Mark          |
 | Jeremy        |
 | Josh          |
 | Jenny         |
 | Mike          |
 | Thurmon       |
 | Milton        |
 | Nikki         |
 | Avis          |
 | Josh          |
 + — — — — — — — +
 14 rows in set (0.00 sec)

На мой взгляд, использование пакетного режима является эффективным способом для больших объемных вставок.

Обзор всей таблицы friends, содержащей все вставки, выполненные в этом сообщении в блоге (среди других, уже представленных в таблице),

mysql> SELECT * FROM friends;
 +-----------+--------------+-------------+--------------+-------+------------+
 | friend_id | f_first_name | f_last_name | f_cell_phone | f_age | f_bday     |
 +-----------+--------------+-------------+--------------+-------+------------+
 |         1 | John         | Tom         | 318-767-8818 |    32 | NULL       |
 |         2 | John         | Roberts     | 555-867-5309 |    36 | 1981-04-17 |
 |         3 | Billy        | Bogus       | 777-383-2828 |    44 | 1973-08-03 |
 |         4 | Jennifer     | Kelly       | 979-191-6652 |    39 | 1978-10-16 |
 |         5 | Mark         | Harmon      | 567-733-0833 |    28 | 1989-06-27 |
 |         6 | Jeremy       | Hall        | 777-272-1717 |    40 | 1977-02-07 |
 |         7 | Josh         | Remey       | 727-213-7119 |    40 | 1977-03-17 |
 |         8 | Jenny        | Marcum      | 543-179-1548 |    37 | 1980-09-27 |
 |         9 | Mike         | Comb        | 118-972-1919 |    30 | 1987-10-05 |
 |        10 | Thurmon      | Docker      | 393-392-1010 |    25 | 1992-08-19 |
 |        11 | Milton       | Hammerfast  | 318-272-0797 |    41 | 1976-05-11 |
 |        12 | Nikki        | Vernon      | 548-498-9949 |    28 | 1989-01-31 |
 |        13 | Avis         | Pearl       | 509-292-8787 |    64 | 1953-07-04 |
 |        14 | Josh         | Otwell      | 318-282-2075 |    41 | NULL       |
 +-----------+--------------+-------------+--------------+-------+------------+
 14 rows in set (0.00 sec)

Вставить выводы для этого сообщения…

  • Для заполнения указанной таблицы пользователю требуется привилегия INSERT.
  • Имена столбцов могут быть указаны любым из следующих способов:
  • Список в скобках разделенных запятыми имен столбцов. В этом случае значение для каждого указанного столбца должно быть в списке VALUES. (Также применяется для вставки с помощью оператора SELECT, однако эта функция не рассматривается в этом сообщении в блоге.)
  • Если не указан список имен столбцов, значения должны быть указаны для каждого столбца в таблице по порядку. Однако ключевое слово DEFAULT можно использовать для тех столбцов, для которых значение DEFAULT установлено при создании таблицы.

2.

  • Значения столбца можно указать следующим образом:
  • Когда строгий режим SQL не включен, значения столбца, не указанные явно, устанавливаются на значение DEFAULT для этого столбца с типом данных, определяемым таблицей, или типом данных DEFAULT.
  • INSERT выдает ошибку, если не указаны значения для всех столбцов, для которых не задано значение по умолчанию, когда включен строгий режим SQL.
  • INSERT INTO table_name () VALUES (); - Допустимо, но MySQL обрабатывает это следующим образом:
  • Когда строгий режим не включен, неявное значение DEFAULT используется для столбца, для которого не определено явно DEFAULT.
  • Ошибка возникает, если какие-либо столбцы не имеют значения по умолчанию при включенном строгом режиме.
  • Ключевое слово DEFAULT может использоваться для явной установки для столбца значения по умолчанию.

Закрытие.

Вставки - это мощная функция MySQL, необходимая для операций с базой данных. В конце концов, таблицам нужны данные, не так ли?
Следите за этой продолжающейся серией, поскольку в следующем сообщении блога будут рассмотрены две наиболее мощные команды MySQL: UPDATE и DELETE.

Не стесняйтесь посетить официальное MySQL 5.7 Online Manual для дальнейшего изучения или вопросов.

Призыв к действию!

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

Я уже упоминал, как я люблю чашку кофе?!?!

Чтобы получать уведомления о последних публикациях от Digital Owl's Prose по электронной почте, подпишитесь, нажав кнопку Нажмите, чтобы подписаться! На боковой панели!
Обязательно посетите страницу Best Of на следующей странице. мой сайт Цифровая проза Совы, где собраны мои лучшие сообщения в блогах.

Джош Отвелл хочет учиться и расти как разработчик SQL и блогер. Другие любимые занятия находят его, уткнувшись носом в хорошую книгу, статью или командную строку Linux. Среди них он разделяет любовь к настольным ролевым играм, чтению фэнтезийных романов и проведению времени с женой и двумя дочерьми.

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

Первоначально опубликовано на joshuaotwell.com 8 ноября 2017 г.