Вставка числовых, строковых, календарных и уникальных значений в таблицу. Механизм AUTO_INCREMENT

Вставка числовых значений в таблицу

Для вставки записи в таблицу используется оператор INSERT. Однострочный оператор INSERT может использоваться в нескольких формах. Упрощенный синтаксис первой формы выглядит следующим образом:

INSERT [IGNORE] [INTO] tb1 [(col_name, . . .)] VALUES (expression, . . .)

После оператора VALUES в скобках через запятую перечисляются все значения полей таблицы в соответствии с из типами.

Примечание. При описании синтаксиса операторов ключевые слова, которые не являются обязательными и могут быть опущены, заключаются в квадратные скобки.

Создадим в базе данных wet таблицу tb1, cостоящую из двух числовых столбцов: id, который по умолчанию будет иметь значение 5, и id_cat, который будет принимать по умолчанию значение NULL.

Таблица tb1

Таблица tb1

Cуществует несколько вариантов использования оператора INSERT, каждый из которых приводит к вставке новой записи.

Вставка записи при помощи оператора INSERT

Проверить результат вставки новых записей в таблицу можно при помощи оператора SELECT, синтаксис которого будет разобран далее.

Просмотр содержимого таблицы tb1

Просмотр содержимого таблицы tb1

Рассмотрим различные формы оператора INSERT более подробно. Первая форма оператора INSERT вставляет в таблицу tb1 запись (10, 20), столбцы получают значение по порядку из круглых скобок, следующих за ключевым словом VALUES. Если значений в круглых скобках будет больше или меньше, чем столбцов в таблице, то сервер MySQL вернет ошибку Column count doesn't match value count at row 1(Не совпадает количество значений и столбцов в запросе).

Порядок занесения значений в запись можно изменить. Для этого следует задать порядок следования столбцов в дополнительных круглых скобках после имени таблицы. Второй оператор INSERT меняет порядок занесения значений: первое значение получает второй столбец id_cat, а второе значение — первый столбец id.

Часть столбцов можно опускать из списка — в этом случае они получают значение по умолчанию. В третьем операторе заполняется лишь поле id, при этом поле id_cat получает значение по умолчанию — NULL.

Четвертый оператор вообще не содержит значений, в этом случае все столбцы таблицы tb1 получат значения по умолчанию, которые определяет ключевое слово DEFAULT. Эффекта последнего оператора можно добиться, если использовать вместо значений ключевое слово DEFAULT.

Использование ключевого слова DEFAULT

Использование ключевого слова DEFAULT

Приведенная в первом примере форма оператора INSERT является стандартной и поддерживается всеми СУБД, которые реализуют стандарт SQL. Однако СУБД MySQL поддерживает альтернативный синтаксис оператора INSERT.

Альтернативный синтаксис оператора INSERT

Альтернативный синтаксис оператора INSERT

Как видно из листинга, значения присваиваются столбцам при помощи ключевого слова SET; не указанные в операторе столбцы принимают значение по умолчанию.

Просмотр содержимого таблицы

Просмотр содержимого таблицы

Вставка строковых значений в таблицу

Создадим в базе данных wet таблицу catalogs, которая будет содержать два столбца: числовой столбец id_catalog и текстовой столбец name.

Создание таблицы catalogs

Создание таблицы catalogs

Добавить новую запись в таблицу catalogs можно при помощи запроса представленного ниже.

Добавление новой записи в таблицу catalogs

Добавление новой записи в таблицу catalogs

В таблицу catalogs добавилась новая запись с первичным ключем id_catalog, равным единице, и значением поля nameПроцессоры. Строковые значения необходимо помещать в кавычки, в то время как числовые значения допускается использовать без них.

Вместо одиночных кавычек можно использовать двойные кавычки. Когда в текстовое поле необходимо вставить строку, содержащую двойные кавычки, можно использовать для обрамления строки одиночные кавычки и наоборот.

Использование двойных кавычек

Использование двойных кавычек

В некоторых случаях(например,при использовании одиночных кавычек в качестве обрамляющих и внутри вводимой строки) следует прибегнуть к экранированию внутренних кавычек, т.е. использованию символа \ перед кавычками, включенными в строку.

Примечание. При помещении в базу данных текста, набранного пользователем, вседа следует экранировать кавычки, для того чтобы предотвратить возникновение ошибки и атаку SQL-инъекций.

Экранирование кавычек

Экранирование кавычек

Вставка календарных значений

В общем случае вставка календарных значений мало чем отличается от вставки строк, однако этот тип данных не случайно выделяют в отдельный класс. Создадим таблицу tbl в базе данных wet. Таблица будет содержать числовое поле id и два календарных поля: putdate типа DATETIME и lastdate типа DATE.

Создание таблицы tbl

Создание таблицы tbl

Вставка календарных значений

Вставка календарных значений

Если столбцу передается "лишняя" информация, то она отбрасывается. В нашем примере в столбец типа DATE передаются часы, минуты и секунды, однако в столбец попадает только информация о дате.

Отбрасывание лишней информации

Отбрасывание лишней информации

Зачастую календарные поля предназначены для того, чтобы пометить момент вставки записи в базу данных. Для получения текущего времени удобно воспользоваться встроенной функции MySQL — NOW(). При помощи функции NOW() в таблицу tbl вставляется запись с текущей временной меткой.

Использование функции NOW()

Использование функции NOW()

Просмотр содержимого таблицы

Просмотр содержимого таблицы

Вычисление текущего времени в рамках одного SQL-запроса производится только один раз, сколько бы раз они не вызывались на протяжении данного запроса. Это приводит к тому, что временное значение в рамках всего запроса остается постоянным.

Для получения сдвига даты относительно текущей можно прибавлять и вычитать интервалы. Для этого используется ключевое слово INTERVAL, после которого следует временный интервал.

Использование интервалов

Использование интервалов

В данном примере в поле putdate помещается дата, эквивалентная 15.03.09 за вычетом 3 недель, а в поле lastdate помещается дата, равная текущей плюс 3 месяца.

Интервалы могут быть различного типа. Полный список допустимых интервалов приводится в ниже следующей таблице.

Типы временных интервалов

Тип Описание Формат ввода
MICROSECOND Микросекунды хххххх
SECOND Секунды ss
MINUTE Минуты mm
HOUR Часы hh
DAY Дни DD
WEEK Недели WW
MONTH Месяцы MM
QUARTER Квартал QQ
YEAR Год YY
SECOND_MICROSECOND Секунды и микросекунды 'ss.xxxxxx'
MINUTE_MICROSECOND Минуты, секунды и микросекунды 'mm:ss.xxxxxx
MINUTE_SECOND Минуты и секунды 'mm:ss'
HOUR_MICROSECOND Часы, минуты, секунды, микросекунды 'hh:mm:ss.xxxxxx'
HOUR_SECOND Часы, минуты, секунды 'hh:mm:ss'
HOUR_MINUTE Часы и минуты 'hh:mm'
DAY_MICROSECOND Дни, часы, минуты, секунды и микросекунды 'DD hh:mm:ss.xxxxxx'
DAY_SECOND Дни, часы, минуты и секунды 'DD hh:mm:ss'
DAY_MINUTE Дни, часы, минуты 'DD hh:mm'
DAY_HOUR Дни и часы 'DD hh'
YEAR_MONTH Года и месяцы 'YY-MM'

Вставка уникальных значений

Первичный ключ таблицы (PRIMARY KEY) или столбец, индексированный уникальным индексом (UNIQUE), не могут иметь повторяющихся значений. Вставка записи со значением, уже имеющимся в таблице, приводит к возникновению ошибки. Для чистоты "эксперемента" создадим в базе данных wet новую таблицу tb2.

Значения первичного ключа должны быть уникальными

Значения первичного ключа должны быть уникальными

Для того, чтобы новые записи с дублирующим ключем отбрасывались без генерации ошибки, следует добавить после оператора INSERT ключевое слово IGNORE.

Использование ключевого слова IGNORE

Использование ключевого слова IGNORE

   Как видно из примера, генерации ошибки не происходит и новой записи также не добавляется.

Механизм AUTO_INCREMENT

При добавлении новой записи с уникальными индексами выбор такого уникального значения может быть непростой задачей. Для того, чтобы не осуществлять дополнительный запрос, направленный на выяснение максимального значения первичного ключа для создания нового уникального значения, в MySQL введен механизм его автоматической генерации. Для этого достаточно снабдить первичный ключ атрибутом AUTO_INCREMENT, после чего при создании новой записи достаточно передать данному столбцу в качестве значения NULL или 0. Поле автоматически получит значение, равное максимальному значению в столбце, плюс единица.

Для примера, создадим в базе данных wet таблицу tb3, состоящую из первичного ключа id и текстового поля name. Первичный ключ id снабдим атрибутом AUTO_INCREMENT.

Действие механизма AUTO_INCREMENT

Действие механизма AUTO_INCREMENT




  • Другие |
назадвверхвперед
Rambler's Top100