Вставка числовых значений в таблицу
Для вставки записи в таблицу используется оператор INSERT
. Однострочный оператор INSERT
может использоваться в нескольких формах. Упрощенный синтаксис первой формы выглядит следующим образом:
INSERT [IGNORE] [INTO] tb1 [(col_name, . . .)] VALUES (expression, . . .)
После оператора VALUES
в скобках через запятую перечисляются все значения полей таблицы в соответствии с из типами.
Примечание. При описании синтаксиса операторов ключевые слова, которые не являются обязательными и могут быть опущены, заключаются в квадратные скобки.
Создадим в базе данных wet таблицу tb1
, cостоящую из двух числовых столбцов: id
, который по умолчанию будет иметь значение 5, и id_cat
, который будет принимать по умолчанию значение NULL
.
Таблица tb1
Cуществует несколько вариантов использования оператора INSERT
, каждый из которых приводит к вставке новой записи.
Вставка записи при помощи оператора INSERT
Проверить результат вставки новых записей в таблицу можно при помощи оператора SELECT
, синтаксис которого будет разобран далее.
Просмотр содержимого таблицы 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
Приведенная в первом примере форма оператора INSERT
является стандартной и поддерживается всеми СУБД, которые реализуют стандарт SQL. Однако СУБД MySQL поддерживает альтернативный синтаксис оператора INSERT
.
Альтернативный синтаксис оператора INSERT
Как видно из листинга, значения присваиваются столбцам при помощи ключевого слова SET
; не указанные в операторе столбцы принимают значение по умолчанию.
Просмотр содержимого таблицы
Вставка строковых значений в таблицу
Создадим в базе данных wet
таблицу catalogs
, которая будет содержать два столбца: числовой столбец id_catalog
и текстовой столбец name
.
Создание таблицы catalogs
Добавить новую запись в таблицу catalogs
можно при помощи запроса представленного ниже.
Добавление новой записи в таблицу catalogs
В таблицу catalogs
добавилась новая запись с первичным ключем id_catalog
, равным единице, и значением поля name
— Процессоры. Строковые значения необходимо помещать в кавычки, в то время как числовые значения допускается использовать без них.
Вместо одиночных кавычек можно использовать двойные кавычки. Когда в текстовое поле необходимо вставить строку, содержащую двойные кавычки, можно использовать для обрамления строки одиночные кавычки и наоборот.
Использование двойных кавычек
В некоторых случаях(например,при использовании одиночных кавычек в качестве обрамляющих и внутри вводимой строки) следует прибегнуть к экранированию внутренних кавычек, т.е. использованию символа \ перед кавычками, включенными в строку
.Примечание. При помещении в базу данных текста, набранного пользователем, вседа следует экранировать кавычки, для того чтобы предотвратить возникновение ошибки и атаку SQL-инъекций.
Экранирование кавычек
Вставка календарных значений
В общем случае вставка календарных значений мало чем отличается от вставки строк, однако этот тип данных не случайно выделяют в отдельный класс. Создадим таблицу tbl
в базе данных wet
. Таблица будет содержать числовое поле id
и два календарных поля: putdate
типа DATETIME
и lastdate
типа DATE
.
Создание таблицы tbl
Вставка календарных значений
Если столбцу передается "лишняя" информация, то она отбрасывается. В нашем примере в столбец типа DATE
передаются часы, минуты и секунды, однако в столбец попадает только информация о дате.
Отбрасывание лишней информации
Зачастую календарные поля предназначены для того, чтобы пометить момент вставки записи в базу данных. Для получения текущего времени удобно воспользоваться встроенной функции MySQL — NOW()
. При помощи функции NOW()
в таблицу tbl
вставляется запись с текущей временной меткой.
Использование функции NOW()
Просмотр содержимого таблицы
Вычисление текущего времени в рамках одного SQL-запроса производится только один раз, сколько бы раз они не вызывались на протяжении данного запроса. Это приводит к тому, что временное значение в рамках всего запроса остается постоянным.
Для получения сдвига даты относительно текущей можно прибавлять и вычитать интервалы. Для этого используется ключевое слово INTERVAL
, после которого следует временный интервал.
Использование интервалов
В данном примере в поле putdate помещается дата, эквивалентная 15.03.09 за вычетом 3 недель, а в поле lastdate помещается дата, равная текущей плюс 3 месяца.
Интервалы могут быть различного типа. Полный список допустимых интервалов приводится в ниже следующей таблице.
Тип | Описание | Формат ввода |
---|---|---|
MICROSECOND | Микросекунды | хххххх |
SECOND | Секунды | ss |
MINUTE | Минуты | mm |
HOUR | Часы | hh |
DAY | Дни | DD |
WEEK | Недели | WW |
MONTH | Месяцы | MM |
QUARTER | Квартал | |
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
Как видно из примера, генерации ошибки не происходит и новой записи также не добавляется.
Механизм AUTO_INCREMENT
При добавлении новой записи с уникальными индексами выбор такого уникального значения может быть непростой задачей. Для того, чтобы не осуществлять дополнительный запрос, направленный на выяснение максимального значения первичного ключа для создания нового уникального значения, в MySQL введен механизм его автоматической генерации. Для этого достаточно снабдить первичный ключ атрибутом AUTO_INCREMENT
, после чего при создании новой записи достаточно передать данному столбцу в качестве значения NULL
или 0. Поле автоматически получит значение, равное максимальному значению в столбце, плюс единица.
Для примера, создадим в базе данных wet
таблицу tb3
, состоящую из первичного ключа id
и текстового поля name
. Первичный ключ id
снабдим атрибутом AUTO_INCREMENT
.
Действие механизма AUTO_INCREMENT
Комментарии(0)
Для добавления комментариев надо войти в систему и авторизоватьсяКомментирование статей доступно только для зарегистрированных пользователей:Зарегистрироваться