Листинг 6.4. Использование ключевого слова IGNORE.
Как видно из листинга 6.4, генерации ошибки не происходит, тем не менее новая запись также не добавляется.
При добавлении новой записи с уникальными индексами выбор такого уникального значения может быть непростой задачей. Для того чтобы не осуществлять дополнительный запрос, направленный на выявление максимального значения первичного ключа для генерации нового уникального значения, в MySQL введен механизм его стоматической генерации. Для этого достаточно снабдить первичный ключ --_catalog атрибутом auto_increment (см. главу 5). Тогда при создании новой записи з качестве значения id__catalog достаточно передать null или 0 — поле автоматически получит значение, равное максимальному значению столбца id_cataiog, плюс единица (листинг 6.5).
При вставке оператором insert не обязательно указывать все столбцы. Те столбцы, которые не указаны в списке, получат значение по умолчанию. Так, в листинге 6.6 значение id_catalog не передается оператору insert.
Так как id_catalog по умолчанию принимает значение null, которое вызывает механизм auto_increment, то поле id_catalog автоматически получает значение 5 (максимальное значение 4 плюс 1). Допускается добавление полностью пустых строк, это продемонстрировано в листинге 6.7
Так как текстовое поле name по умолчанию принимает пустую строку, новая запись содержит пустую запись. Значение по умолчанию можно подставить, если передать в качестве значения ключевое слово default (листинг 6.8).
Часто в прикладных программах требуется узнать значение, присвоенное столбцу и снабженное атрибутом auto_increment. Это может потребоваться для того, чтобы использовать сгенерированное значение первичного ключа в качестве вторичного в другой таблице или для каких-то других целей. Только что сгенерированное значение возвращает встроенная функция MySQL last_insert_id(), как это показано в листинге 6.9.
Например, если необходимо, чтобы следующее значение поля id_catalog приняло значение 16, а не 7, можно воспользоваться запросом, представленным в листинге 6.10
Кроме констант, в списке значений expression могут выступать выражения с участием столбцов из списка col_name.
Так, в листинге 6.11 для первой записи поле id_catalog принимает значение 6, а поле name значение 21 (7x3). Ссылаться в выражении можно только на столбцы, расположенные левее, ссылка на правые столбцы дает 0 (в случае столбца id_catalog это ( привело к автоматической генерации нового уникального значения 16 вместо ожидаемых 21).
Если при вставке нового значения задействован механизм auto_increment, to воспользоваться вновь сгенерированным значением не удастся (листинг 6.12), так сначала полю id_catalog присваивается значение 0, и лишь после того, как запись добавлена — генерируется новое значение.
Еще одной формой оператора insert является синтаксис с ключевым словом set
INSERT [INTO] tbl SET col_name=expr, ...
Оператор заносит в таблицу tbi новую запись, столбец coi_name в котором получает значение ехрr.
Запрос в листинге 6.13 аналогичен запросу в листинге 6.14
Форма оператора insert с ключевым словом set позволяет более гибко добавлять записи. Если имя столбца после set не встречается, полю присваивается значение по умолчанию.
Многострочный оператор INSERT
Многострочный оператор insert совпадает по форме с однострочным оператором. В нем используется ключевое слово values, после которого добавляется не один, а несколько списков expression. Так, в листинге 6.15 добавляется сразу пять записей при помощи одного оператора insert.
Точно так же, как и в случае однострочного варианта, допускается изменять порядок и состав списка добавляемых значений.
Дата добавления: 2020-11-18; просмотров: 367;