Полям, которые не указаны в списке, автоматически присваивается значение по умолчанию. Рассмотрим это на следующем примере.
Листинг 9.9.
mysql> CREATE TABLE forums (name VARCHAR(150) NOT NULL, category VARCHAR(50) DEFAULT 'UNIX' NOT NULL, postsperpage SMALLINT DEFAULT 15 NOT NULL, highlightColor VARCHAR(10) DEFAULT 'red' NOT NULL);
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO forums (name) VALUES ('Apache');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO forums (name, highlightColor) VALUES ('Sendmail', 'green'); Query OK, 1 row affected (0.00 sec)
Начиная с версии 4.0.3, MySQL также поддерживает новое ключевое слово DEFAULT, которое указывает на использование для данного поля записи значения по умолчанию.
Листинг 9.10.
mysql> INSERT INTO forums (name, category, postsperpage,
highlightColor) VALUES ('MySQL', DEFAULT, DEFAULT, DEFAULT);
Query OK, 1 row affected (0.01 sec)
Работа с полями, объявленными с ключевым словом autoincrement
Использование столбцов с ключевым словом AUTOINCREMENT, позволяет не указывать имя такого поля в операторах INSERT. При этом MySQL "знает", что нужно вставлять следующее по порядку число. Такое число может служить первичным ключом в вашей таблице. Рассмотрим следующий пример, в котором будет проиллюстрирована таблица со столбцом AUTOINCREMENT в качестве первичного ключа,
Листинг 9.11.
mysql> CREATE TABLE users (uid TINYINT(4) NOT NULL AUTO_INCREMENT, uname varchar(8) NOT NULL DEFAULT '', upass VARCHAR(l5) NOT NULL
DEFAULT '', PRIMARY KEY (uid));
Query OK, 0 rows affected (0.08 sec)
а затем заполним его данными. Листинг 9.12.
mysql> INSERT INTO users (uname, upass) VALUES ('jim', PASSWORD('secret'));
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO users (uname, upass) VALUES ('sarah', PASSWORD('opensesame'));
Query OK, 1 row affected (0.02 sec)
mysql> INSERT INTO users (uname, upass) VALUES ('tim', PASSWORD('whiteboard'));
Query OK, 1 row affected (0.00 sec)
В каждой записи в поле uid будет автоматически добавлено следующее по порядку число.
Работа с полями, объявленными с ключевым словом UNIQUE
При добавлении записей с повторяющимися значениями поля, объявленного как UNIQUE, можно проследить, каким образом MySQL обрабатывает эту ситуацию: пропускает операцию вставки, аварийно завершает действие или модифицирует старую запись с новыми значениями при использовании ключевого слова IGNORE или предложения ON DUPLICATE KEY UPDATE.
Для того чтобы лучше это понять, рассмотрим следующую таблицу, которая содержит в поле id уникальный ключ.
Обычно при попытке добавления записи, нарушающей ограничение по уникальности, MySQL аварийно завершает операцию с сообщением об ошибке.
Листинг 9.15.
mysql> INSERT INTO menu (id, label, url) VALUES (4, 'Contact Us',
'contactus.html');
ERROR 1062: Duplicate entry '4' for key 1
При добавлении к оператору INSERT ключевого слова IGNORE, MySQL даже не попытается выполнить этот оператор, если он обнаружит, что нарушается ограничение по уникальности. Поэтому, несмотря на то, что этот оператор не возвращает сообщения об ошибке,
Листинг 9.16.
mysql> INSERT IGNORE INTO menu (id, label, url) VALUES (4, 'Contact
Us', 'contactus.html');
Query OK, 0 rows affected (0.01 sec)
данные останутся неизменными.
Долой все старое ...
Команда REPLACE, имеющая тот же синтаксис, что и команда INSERT, не сильно отличается от предложения ON DUPLICATE KEY UPDATE. Однако в отличие от команды INSERT, которая выдает диагностическое сообщение в том случае, если в добавленной записи повторяется значение в поле, обозначенное как UNIQUE, по команде REPLACE заменяется вся запись с новыми значениями.
Различие между ON DUPLICATE KEY UPDATE и REPLACE заключается в том, что если первая обновляет только указанные поля, то вторая сначала удаляет старую запись, а затем добавляет вместо нее полностью новую запись.
Ключевое слово IGNORE может пригодиться при необходимости выполнять несколько операторов INSERT последовательно. Такая конструкция оператора гарантирует обязательное выполнение всей цепочки операторов INSERT даже в том случае, если один из них содержит повторяющиеся значения и прерывания выполнения всей операции не происходит.
В такой ситуации, начиная с версии 4.1 можно автоматически преобразовать команду INSERT в команду UPDATE путем прибавления предложения ON DUPLICATE KEY UPDATE. За этим предложением должен следовать перечень модифицируемых полей в форме, которая соответствует синтаксису команды UPDATE. Рассмотрим следующий пример.
Листинг 9.18.
mysql> INSERT INTO menu (id, label, url) VALUES (4, 'Contact Us',
'contactus.html')
ON DUPLICATE KEY UPDATE label = 'Contact Us', url = 'contactus.html';
В этом случае MySQL определяет, что таблица уже содержит запись с тем же уникальным ключом, и автоматически модифицирует старую запись новыми значениями, которые определены в предложении ON DUPLICATE KEY UPDATE. В результате мы получим следующую таблицу.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
Все о MySQL. Работа с полями, объявленными с модификатором default
28-12-2009
<< Предыдущая статья | Следующая статья >> |
Все о MySQL. Обработка данных | Все о MySQL. Работа с полями, объявленными с ключевым словом NULL |