После создания баз данных и таблиц, следующим шагом является их использование для хранения данных. Для добавления, модификации, удаления и выборки определенных записей из таблиц используется язык манипулирования данными (ЯМД) SQL. Так как команды ЯМД используются гораздо чаще команд языка определения данных (ЯОД), речь о которых шла в предыдущей главе, они значительно повышают эффективность работы реляционной СУБД MySQL.
Эта глава содержит детальное описание ЯМД, в ней обсуждается процесс добавления новых записей, модификации или удаления уже существующих записей, выполнения запросов по выборке записей, удовлетворяющих определенному критерию, импорту данных из других источников данных и их экспорту в определенном формате.

Вставка, модификация и удаление записей
СУБД MySQL имеет в своем арсенале множество предназначенных для выполнения определенных действий команд, когда необходима вставка, модификация или изменение каким-либо другим способом содержимого таблиц. В этом разделе представлено обсуждение самых различных команд с соответствующими примерами для демонстрации их работы.
Вставка записей
Следующим шагом после создания таблиц является заполнение их данными. Для этих целей предназначена команда INSERT, имеющая следующий формат:
INSERT INTO имя-таблицы (имя-поля, имя-поля, ...) VALUES (значение, значение, ...)
Проиллюстрируем ее работу на примере создания простой таблицы. Листинг 9.1.
mysql> CREATE TABLE addressbook (fname VARCHAR(255) NULL,
lname VARCHAR(255) NULL, phone VARCHAR(255) NULL,
Обработка данных
Существует еще и сокращенная форма оператора INSERT, в которой список полей от­сутствует. Она показана в следующем примере, во всем аналогичном предыдущему.
Листинг 9.4.
mysql> INSERT INTO addressbook VALUES ('Rob', 'Rabbit', '674 1536', '382 8364', 'rob@some.domain');
Query OK, 1 row affected (0.01 sec)
Следует заметить, что при использовании краткого формата порядок следования добавляемых значений должен соответствовать порядку следования полей в таблице (а определить этот порядок можно с помощью команды DESCRIBE).
Указание имен полей
Несмотря на то, что краткий вариант использования оператора INSERT определенно более популярен, указание имен явным образом предпочтительнее. Это позволяет создаваемому приложению стать более устойчивым относительно изменений структуры таблиц.
С помощью команды INSERT добавляются результаты вычислений или вызовы функций, как это показано в следующих примерах. 
Листинг 9.5.
mysql> INSERT INTO marks (name, math, sci, total)
VALUES ('James Doe', 45, 67, math + sci);
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO users (id, name, password)
VALUES (LAST_INSERT_ID() + 1, 'tam', 'secret');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO sales (id, cost, quantity, amount) VALUES (8587, 100, 4500, cost * quantity);
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO log (process, message, timestamp)
VALUES ('crond', 'Unable to send mail in /usr/local/bin/backup.sh',
NOW());
Query OK, 1 row affected (0.01 sec)
При добавлении строковых значений (и некоторых дат) в таблицы, их необходимо выделять кавычками, в противном случае MySQL будет рассматривать их в качестве имен полей.
Листинг 9.6.
mysql> INSERT INTO addressbook (fname, lname, phone, fax, email) VALUES ('Rob', Rabbit, '674 1536', '382 8364', 'rob@some.domain'); ERROR 1054: Unknown column 'Rabbit' in 'field list'
Значения, которые сами содержат кавычки, должны выделяться предшествующим символом обратной косой черты "".
Листинг 9.7.
mysql> INSERT INTO addressbook (fname, lname, phone, fax, email) VALUES ('Frances', 'D'Souza', '123 4567', '000 7574',
'fdz@same.domain');
Query OK, 1 row affected (0.11 sec)
Цифровые значения кавычками не выделяются.
Листинг 9.8.
mysql> INSERT INTO stock (cost, quantity) VALUES (760.52, 65000);
Query OK, 1 row affected (0.01 sec)
Необязательность ключевого слова into
В MySQL ключевое слово INTO в операторе INSERT не является обязательным.
MySQL также поддерживает следующие два нестандартных варианта использования оператора INSERT.
■ Возможно использование нескольких предложений VALUES() в одном операторе INSERT. Например, вместо использования нескольких операторов INSERT, получаем следующее:
mysql> INSERT INTO stocks (symbol, price, quantity) VALUES ("ABCD", 100, 4500); 
Query ОК, 1 row affected (0.05 sec)
mysql> INSERT INTO stocks (symbol, price, quantity) VALUES ('HYDH', 2000, 29);
Query ОК, 1 row affected (0.00 sec)
mysql> INSERT INTO stocks (symbol, price, quantity)
VALUES ('UGTS', 25, 67);
Query ОК, 1 row affected (0.05 sec) Также можно сделать следующее:
mysql> INSERT INTO stocks (symbol, price, quantity)
VALUES ('ABCD', 100, 4500),
('HYDH', 2000, 29), ('UGTS', 25, 67);
Query ОК, 3 rows affected (0.06 sec) Records: 3 Duplicates: 0 Warnings: 0
■ Вполне возможно вообще отказаться от конструкции INSERT...VALUES в пользу синтаксиса, используемого в операторе UPDATE. Это подразумевает использование предложения SET для указания значений для каждого столбца отдельно. Таким образом, вместо
mysql> INSERT INTO stocks (symbol, price, quantity)
VALUES ('UGTS', 25, 67);
Query ОК, 1 row affected (0.00 sec) получаем следующее:
mysql> INSERT INTO stocks SET symbol='HYDH', price=2000, quan-tity=29;
Query ОК, 1 row affected (0.06 sec)