如何设置MySQL Datetime列的默认值?
在SQL Server中是getdate()。MySQL的等价物是什么?我使用MySQL 5。X,如果它是因式。
如何设置MySQL Datetime列的默认值?
在SQL Server中是getdate()。MySQL的等价物是什么?我使用MySQL 5。X,如果它是因式。
当前回答
MySQL 5.6已经修复了这个问题。
ALTER TABLE mytable CHANGE mydate datetime NOT NULL DEFAULT 'CURRENT_TIMESTAMP'
其他回答
MySQL 5.6已经修复了这个问题。
ALTER TABLE mytable CHANGE mydate datetime NOT NULL DEFAULT 'CURRENT_TIMESTAMP'
我可以在有两个datetime字段的表上使用这个alter语句来解决这个问题。
ALTER TABLE `test_table`
CHANGE COLUMN `created_dt` `created_dt` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
CHANGE COLUMN `updated_dt` `updated_dt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
这与您期望now()函数的工作方式一样。插入空值或忽略created_dt和updated_dt字段会在两个字段中产生完美的时间戳值。对该行的任何更新都会改变updated_dt。如果您通过MySQL查询浏览器插入记录,那么还需要一个触发器来处理带有新时间戳的created_dt。
CREATE TRIGGER trig_test_table_insert BEFORE INSERT ON `test_table`
FOR EACH ROW SET NEW.created_dt = NOW();
触发器可以是任何你想要的,我只是喜欢命名约定[trig]_[my_table_name]_[insert]
在版本5.6.5中,可以在datetime列上设置默认值,甚至可以使列在行更新时更新。类型定义:
CREATE TABLE foo (
`creation_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modification_time` DATETIME ON UPDATE CURRENT_TIMESTAMP
)
参考: http://optimize-this.blogspot.com/2012/04/datetime-default-now-finally-available.html
如果我有一个名为“site”的表,其中created_at和update_at列都是DATETIME,并且需要现在的默认值,我可以执行以下sql来实现这一点。
ALTER TABLE `site` CHANGE `created_at` `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP; ALTER TABLE `site` CHANGE `created_at` `created_at` DATETIME NULL DEFAULT NULL; ALTER TABLE `site` CHANGE `updated_at` `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP; ALTER TABLE `site` CHANGE `updated_at` `updated_at` DATETIME NULL DEFAULT NULL;
语句序列很重要,因为一个表不能有两个TIMESTAMP类型的列,且默认值为CUREENT TIMESTAMP
虽然你不能在默认定义的DATETIME中这样做,你可以简单地在插入语句中合并一个选择语句,就像这样:
INSERT INTO Yourtable (Field1, YourDateField) VALUES('val1', (select now()))
请注意,桌子周围没有引号。
MySQL 5.5