Интересное из жизни баз данных
Oct. 22nd, 2010 09:36 amСколько работаю с базами данных, а вот только сейчас наткнулся на интересное поведение MySQL при объявлении полей timestamp с NOT NULL.
Допустим, делаем мы:
CREATE TABLE `sometable` (`somefield` timestamp NOT NULL)
А на выходе получаем таблицу, созданную вот так:
create table `sometable` (`somefield` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP)
Более того, тот же вариант получится, если создать таблицу так:
create table `sometable` (`somefield` timestamp NOT NULL default CURRENT_TIMESTAMP)
С автоматическим добавлением default value всё логично. Раз поле NOT NULL - будьте добры дать значение по умолчанию, а для этого типа полей оно CURRENT_TIMESTAMP.
Но вот почему бы при update не оставлять предыдущее значение поля? При попытке вписать туда NULL выдавать ошибку, и всё. А так мы имеем то, что при любом апдейте строки значение этого поля автоматически изменится.
Напрямую о таком поведении в мануале не говорится, только в пользовательских комментариях к нему (это я уже потом нашёл).
Допустим, делаем мы:
CREATE TABLE `sometable` (`somefield` timestamp NOT NULL)
А на выходе получаем таблицу, созданную вот так:
create table `sometable` (`somefield` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP)
Более того, тот же вариант получится, если создать таблицу так:
create table `sometable` (`somefield` timestamp NOT NULL default CURRENT_TIMESTAMP)
С автоматическим добавлением default value всё логично. Раз поле NOT NULL - будьте добры дать значение по умолчанию, а для этого типа полей оно CURRENT_TIMESTAMP.
Но вот почему бы при update не оставлять предыдущее значение поля? При попытке вписать туда NULL выдавать ошибку, и всё. А так мы имеем то, что при любом апдейте строки значение этого поля автоматически изменится.
Напрямую о таком поведении в мануале не говорится, только в пользовательских комментариях к нему (это я уже потом нашёл).