Это вторая часть, в которой будут описаны способы вставки данных в таблицы.
Первая часть доступна тут>>> – в ней описаны общие возможности при работе с 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 – выборка и сортировка значений из таблиц.