Многострочечный оператор INSERT совпадает по форме с однострочечным оператором. В нем используется ключевое слово VALUES, после которого добавляется не один, а несколько списков expression.
Примечание. Как и в однострочной версии оператора INSERT, допускается использование ключевого слова IGNORE для игнорирования записей, значения уникальных индексов которые совпадают с одним из уже имеющихся в таблице значений.
Рассмотрим пример, где добавляются сразу пять записей при помощи одного оператора INSERT. Для записи будем использовать таблицу catalogs в базе данных wet.
Многострочечный оператор INSERT
Как и вслучае одностороннего варианта, допускается изменять порядок и состав списка добавляемых значений.
Изменение состава столбцов в многострочечном операторе INSERT
Время от времени возникает задача удаления записей из базы данных, для которой предназначены следующие два оператора:
Оператор DELETE имеет следующий синтаксис:
DELETE FROM table_name
WHERE definition
ORDER BY . . .
LIMIT rows
Оператор DELETE удаляет из таблицы table_name записи, удовлетворяющие заданным в definition условиям, и возвращает число удаленных записей.
Рассмотрим пример, где из таблицы catalogs удаляются записи, значение первичного ключа id_catalogs которых меньше 1.
Если в операторе DELETE отсутствует условие WHERE, из таблицы удаляются все записи.
Удаление всех записей таблицы tbl
Применение ограничений LIMIT позволяет задать максимальное количество уничтожаемых записей. Рассмотрим пример, где удаляется не более 2 записей таблицы catalogs.
Удаление записей из таблицы catalogs
Оператор TRUNCATE TABLE, в отличии от оператора DELETE, полностью очищает таблицу и не допускает условного удаления. То есть оператор TRUNCATE TABLE аналогичен оператору DELETE без условия WHERE и ограничения LIMIT. В отличие от оператора DELETE удаление происходит гораздо быстрее, т.к. при этом не выполняется перебор каждой записи.
Примечание. Оптимизатор запросов СУБД MySQL автоматически использует оператор TRUNCATE TABLE, если оператор DELETE не содержит WHERE-условия или конструкции LIMIT.
Рассмотрим пример, использования оператора TRUNCATE TABLE для удаления записей в таблице tb3.
Удаление всех записей из таблицы tb3
Операция обновления позволяет менять значения полей в уже существующих записях. Для обновления данных предназначены операторы UPDATE и REPLACE. Первый обновляет отдельные поля в уже существующих записях, когда оператор REPLACE больше похож на INSERT, за исключением того, что если старая запись в данной таблице имеет то же значение индекса UPDATE или PRIMARY KEY, что и новая, то старая запись перед занесением новой записи будет удалена.
Оператор UPDATE имеет следующий синтаксис:
UPDATE [IGNORE] table_name
SET col1 = expr1 [, col2 = expr2 . . .]
[WHERE definition]
[ORDER BY . . .]
[LIMIT rows]
Сразу послеключевого слова UPDATE в инструкции указывается таблица table_name, которая подвергается изменению. В предложении SET перечисляются столбцы, которые подвергаются обновлению, и устанавливаются их новые значения. Необязательное условие WHERE позволяют задать критерий отбора строк — обновлению будут подвергаться только те строки, которые удовлетворяют условию definition.
Примечание. Если в столбец с уникальными значениями (напрмер, столбец с первичным ключем) делается попытка вставки уже существующего значения, это оканчивается сообщением об ошибке. Подавить генерацию ошибки этого типа позволяет использование ключевого слова IGNORE, однако обновление, которое привело бы к дублированию уникальных значений, не осуществляется в этом случае.
Восстановим таблицу catalogs базы данных wet, если она была удалена в процессе работы.
Таблица catalogs
Заменим название элемента каталога Процессоры на Процессоры (Intel).
Обновление таблицы catalogs
Оператор REPLACE работает аналогично INSERT, за исключением того, что если старая запись в данной таблице имеет то же значение индекса UPDATE или PRIMARY KEY, то применение команды REPLACE не имеет смысла, т.к. ее действие при этом идентично команде INSERT.
Синтаксис оператора REPLACE аналогичен синтаксису оператора INSERT:
REPLACE [INTO] table_name [(col_name, . . .)] VALUES (expression, . . .), ( . . .), . . .
В таблицу table_name вставляются значения, определяемые в списке после ключевого слова VALUES. Задать порядок столбцов можно при помощи необязательного списка col_name, следующего за именем таблицы table_name. Как и в случае оператора INSERT, оператор REPLACE допускает многострочный формат.
Рассмотрим пример, где в таблицу catalogs добавляется пять новых записей.
Примечание. Многотабличный синтаксис для оператора REPLACE и INSERT не предусмотрен.
Использование оператора REPLACE
Команда SELECT предназначена для извлечения строк данных из одной или нескольких таблиц и имеет следующий синтаксис:
SELECT column, . . .
[FROM table_name WHERE definition]
[ORDER BY col_name [ASC|DESC], . . . ]
[LIMIT [offset], rows];
Где, column — имя выбираемого столбца. Можно указать несколько столбцов через запятую. Если необходимо выбрать все столбцы, можно просто внести символ звездочки (*). Ключевое слово FROM указывает таблицу table_name, из которой извлекаются записи. Ключевое слово WHERE определяет, так как и в операторе DELETE, условия отбора строк. Ключевое слово ORDER BY сортирует строки запросов по столбцу col_name в прямом (ASC) или обратном порядке (DESC). Ключевое слово LIMIT сообщает MySQL овызове только rows запросов, начиная с позиции offset.
Выборка данных при помощи оператора SELECT
В данном примере, выборка произошла из двух столбцов id_catalog и name , т.е. из всех созданных в данной таблице столбцов.
Использование символа *(все столбцы)
В данном случае произошла выборка всех столбцов из таблицы catalogs.
Частичная выборка
В этом случае выведен один столбец с первичным ключем name.
Использование ключевого слова LIMIT
В результате запроса выделены первые 3 записи из 8.
Оператор LIMIT может также принимать два целочисленных аргумента. В этом случае последний аргумент задает максимальное количество возвращаемых строк, а первый сообщает MySQL, начиная с какой строки производить отсчет.
Альтернативная форма задания LIMIT
Оператор WHERE применяется в команде SELECT точно также, как и в команде DELETE. Выберем из таблицы только те записи, у которых значение id_catalog больше 3.
Условный вариант оператора SELECT
С помощью оператора SELECT мы можем изменить порядок следования столбцов в результирующей таблице или выбрать только часть столбцов.
Изменение порядка выводимых столбцов