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

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

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

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

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

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

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

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

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

[simterm]

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

[/simterm]

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

[simterm]

mysql> desc tablename;

[/simterm]

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

[simterm]

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

[/simterm]

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

[simterm]

mysql> INSERT INTO main_list VALUES(NULL, ‘Alexsander‘, ‘Sunko‘, ‘+380661111111‘, ‘Kiev‘, ‘[email protected]‘, NULL, ‘222333444‘, NULL, ‘Y‘);
Query OK, 1 row affected (0.41 sec)

[/simterm]

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

[simterm]

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 | [email protected] | NULL  | 222333444| NULL       | Y         |
+————+————+———–+—————+——+————————-+——-+———–+————+———–+
1 row in set (0.00 sec)

[/simterm]

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

[simterm]

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

[/simterm]

Посмотрим:

[simterm]

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

[/simterm]

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

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

[simterm]

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)

[/simterm]

Проверим:

[simterm]

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)

[/simterm]

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

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

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

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

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

[simterm]

$ 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       );

[/simterm]

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

[simterm]

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

[/simterm]

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

[simterm]

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

[/simterm]

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

local-infile=1

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

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

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

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

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

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

[simterm]

# 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

[/simterm]

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

[simterm]

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 | [email protected] | 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         |
+————+————+———–+—————+——+————————-+——-+———–+————+———–+

[/simterm]

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

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

[simterm]

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

[/simterm]

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