Простая работа с MySQL в простых примерах #2 — наполнение таблиц

Автор: | 02/03/2013
 

mysqllogoЭто вторая часть, в которой будут описаны способы вставки данных в таблицы.

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

Методы вставки данных

Для добавления данных в таблицы используются несколько методов:

с помощью оператора INSERT и значения VALUES;
с помощью оператора INSERT и значения SET;
с помощью оператора LOAD DATA;
с помощью утилиты mysqlimport из файла, в консоли сервера.

Добавление с помощью оператора с помощью утилиты INSERT VALUES

Оператор INSERT имеет следующий синтаксис:

INSERT INTO tablename VALUES(value1, value2, value3…)

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

mysql> desc tablename;

Выделять значения можно как двойными кавычками » «, так и одинарными  — ‘ ‘. Столбцы, имеющие атрибут AUTO_INCREMENT заполняются значением NULL. Можно использовать множественный ввод для разных строк одной таблицы, указав значения через запятую:

INSERT INTO tablename VALUES(value1, value2, value3…), (value4, value5, value6…);

Для первого примера — используем созданную в первой части статьи таблицу main_list и добавим в неё такие данные:

mysql> INSERT INTO main_list VALUES(NULL, ‘Alexsander‘, ‘Sunko‘, ‘+380661111111‘, ‘Kiev‘, ‘name@gmail.com‘, NULL, ‘222333444‘, NULL, ‘Y‘);
Query OK, 1 row affected (0.41 sec)

И посмотрим — что получилось:

mysql> SELECT * FROM main_list;
+------------+------------+------------+---------------+------+-------------------------+-------+------------+------------+------------+
| contact_id | first_name | last_name | phone         | city | email                   | skype | icq       | birth_date | real_type |
+------------+------------+------------+---------------+------+-------------------------+-------+------------+------------+------------+
|          1 | Alexsander | Sunko| +380661111111| Kiev | name@gmail.com | NULL  | 222333444| NULL       | Y         |
+------------+------------+------------+---------------+------+-------------------------+-------+------------+------------+------------+
1 row in set (0.00 sec)

Добавим вторую запись для Sunko в таблицу main_socials, в которой укажем ссылку на его профайл Вконтакте:

mysql> INSERT INTO main_socials VALUES(NULL, ‘1‘, ‘http://vk.com/asunko‘, NULL);
Query OK, 1 row affected (0.01 sec)

Посмотрим:

mysql> SELECT * FROM main_socials;
+----------+------------+---------------------------+-------------+
| entry_id | contact_id | vk_id                     | facebook_id |
+----------+------------+---------------------------+-------------+
|        1 |          1 | http://vk.com/asunko| NULL        |
+----------+------------+---------------------------+-------------+

Добавление с помощью оператора SET

При использовании оператора SET в запросе перечисляются все имена столбцов и значения, которые в них требуется установить:

mysql> INSERT INTO main_socials SET entry_id=NULL, contact_id=»7«, vk_id=»http://vk.com/agool«, facebook_id=»NULL»;
Query OK, 1 row affected (0.01 sec)

Проверим:

mysql> SELECT * FROM main_socials;
+----------+------------+---------------------------+-------------+
| entry_id | contact_id | vk_id                     | facebook_id |
+----------+------------+---------------------------+-------------+
|        1 |          1 | http://vk.com/asunko| NULL        |
|        2 |         16 | http://vk.com/agool| NULL        |
+----------+------------+---------------------------+-------------+
2 rows in set (0.00 sec)

Однако, с помощью оператора SET нельзя вставлять несколько строк, в отличии от схемы INSERT VALUES.

Больше про оператор INSERT можно прочитать тут>>>.

Добавление из файла с помощью LOAD DATA

Столбцы в файле должны быть разделены табуляцией (не пробелом!). Использовать кавычки не нужно. Значения VALUES располагаются как и при обычном методе INSERT VALUES — по очереди имеющихся столбцов в таблице.

Например — содержимое файла main_list.txt:

cat main_list.txt
INSERT INTO main_list VALUES(NULL       Alexandr       Gool       +380675556677   Kiev    NULL    NULL    222555888       NULL    Y       );
INSERT INTO main_list VALUES(NULL       Vladimir        Trestor +380977778899   Kiev    NULL    NULL    NULL    NULL    Y       );

Выполним запрос:

mysql> LOAD DATA LOCAL INFILE «main_list.txt» into TABLE main_list;
Query OK, 2 rows affected, 7 warnings (0.00 sec)
Records: 2  Deleted: 0  Skipped: 0  Warnings: 7

Если сервер выдал ошибку такого плана:

ERROR 1148 (42000): The used command is not allowed with this MySQL version

Добавьте в конфигурационный файл сервера MySQL my.cnf в блок [client] строку:

local-infile=1

и перезапустите сервер.

Больше информации о LOAD DATA INFILE можно найти тут>>>.

Добавление из файла с помощью mysqlimport

Фактически, mysqlimport просто выполняет оператор LOAD DATA на сервере.

Требования к файлу такие же, как и при использовании LOAD DATA и были описаны выше.

—debug-info использовать не обязательно, тут он просто для примера.

mysqlimport ---local ---debug-info -u setevoy -p contacts main_list.txt
Enter password:
contacts.main_list: Records: 2  Deleted: 0  Skipped: 0  Warnings: 7
User time 0.00, System time 0.00
Maximum resident set size 2804, Integral resident set size 1236
Non-physical pagefaults 201, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 6 out 6, Signals 0
Voluntary context switches 20, Involuntary context switches 7

Посмотрим, что получилось:

mysql> SELECT * FROM main_list;
+------------+------------+------------+---------------+------+-------------------------+-------+------------+------------+------------+
| contact_id | first_name | last_name | phone         | city | email                   | skype | icq       | birth_date | real_type |
+------------+------------+------------+---------------+------+-------------------------+-------+------------+------------+------------+
|          1 | Alexsander | Sunko | +380661111111| Kiev | name@gmail.com | NULL  | 222333444| NULL       | Y         |
|          7 | Alexandra  | Gool      | +380675556677  | Kiev | NULL                    | NULL  | 222555888 | 0000-00-00 | Y         |
|          8 | Vladimir   | Trestor| +380977778899  | Kiev | NULL                    | NULL  |         0 | 0000-00-00 | Y         |
+------------+------------+------------+---------------+------+-------------------------+-------+------------+------------+------------+

Больше про mysqlimport можно прочитать тут>>>.

Для удаления ошибчной или лишней записи — используйте такой запрос:

mysql> DELETE FROM main_list WHERE contact_id=»14«;
Query OK, 1 row affected (0.02 sec)

В следующей части будут рассмотрены другие возможности при работе с MySQL — выборка и сортировка значений из таблиц.



Also published on Medium.