Задавайте вопросы, мы ответим
Вы не зашли.
Странно, читаю в документации, что
For some data types, MySQL handles NULL values specially. If you insert NULL into a TIMESTAMP column, the current date and time is inserted. If you insert NULL into an integer or floating-point column that has the AUTO_INCREMENT attribute, the next number in the sequence is inserted.
То есть если я пишу null в колонку timestamp, то надеюсь там увидеть ненулевое значение. Этого я не вижу.
insert into dvsys_users(`userid`,`accountname`,`sid`,`timestamp`)
select uuid(),'g6',uuid(),NULL;
Если же я пытаюсь управлять сам созданием таймстампа, то я могу получить точность таймстампа только в пределах секунд текущего времени. Текущие микросекунды я не могу получить никоим образом.
insert into dvsys_users(`userid`,`accountname`,`sid`,`timestamp`)
select uuid(),'g5',uuid(),TIMESTAMP(curdate(),curtime());
Подскажите плз какую функцию я могу использовать, чтобы получить текущее значение микросекунд локального времени.
Пишется ли реальный таймстамп при записи нулл в поле с типом таймстамп?
И вообще MySql движок может ли самостоятельно или автоматически вести поля типа таймстамп, чтобы разработчик на это не заморачивался. Или меня заклинило и я не прав?
С уважением
Неактивен
TIMESTAMP хранится в секундах, поэтому миллисекунды не узнаете. NULL работает, более того, можно вообще не указывать эту колонку, текущий timestamp попадет в нее автоматически.
mysql> CREATE TABLE my (id int, t timestamp);
Query OK, 0 rows affected (0.03 sec)
mysql> insert into my VALUES (1, NULL);
Query OK, 1 row affected (0.02 sec)
mysql> select * from my;
+------+---------------------+
| id | t |
+------+---------------------+
| 1 | 2008-12-09 12:11:28 |
+------+---------------------+
1 row in set (0.00 sec)
Обратите внимание, что есть особенности - поле TIMESTAMP может быть определено так, что автоматически заполняться не будет.
mysql> SHOW CREATE TABLE my\G
*************************** 1. row ***************************
Table: my
Create Table: CREATE TABLE `my` (
`id` int(11) default NULL,
`t` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
По умолчанию тип timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, но можно переопределить. Более того, только одно поле timestamp в каждой таблице может быть автозаполняемым.
Неактивен
Да, спасибо
Я определял поле as timestamp null поэтому нулл не работал. Однако одна проблема осталась. Если я ввожу в таблицу подряд несколько строк, то таймстамп у них оказывается одинаково равный, что вообще говоря неверно и в этом видимо виновата точность хранения таймстампа до 1 секунды. То есть, чтобы обеспечить уникальность нужны микросекунды таймстампа, либо введение дополнительного поля например `num` int auto_increment. Так ли это?
Неактивен
Если Вас устроит любая уникальность, то - да, автоинкремент. TIMESTAMP - это секунды, большую точность
вы из него не получите. Более того, даже в случае, если бы писались микросекунды, все равно была бы отличная
от нуля вероятность вставить две строки с одним временем.
Неактивен