如何设置MySQL Datetime列的默认值?
在SQL Server中是getdate()。MySQL的等价物是什么?我使用MySQL 5。X,如果它是因式。
如何设置MySQL Datetime列的默认值?
在SQL Server中是getdate()。MySQL的等价物是什么?我使用MySQL 5。X,如果它是因式。
当前回答
我可以在有两个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]
其他回答
我认为在mysql中很简单,因为mysql的内置函数称为now(),它给出当前时间(插入的时间)。
因此,您的查询应该类似
CREATE TABLE defaultforTime(
`creation_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modification_time` DATETIME default now()
);
谢谢你!
CREATE TABLE `testtable` (
`id` INT(10) NULL DEFAULT NULL,
`colname` DATETIME NULL DEFAULT '1999-12-12 12:12:12'
)
在上面的查询中创建'testtable',我使用'1999-12-12 12:12:12'作为DATETIME列colname的默认值
对于所有使用TIMESTAMP列作为解决方案的人,我想从手册中提出以下限制:
http://dev.mysql.com/doc/refman/5.0/en/datetime.html
TIMESTAMP数据类型的范围是'1970-01-01 00:00:01' UTC到'2038-01-19 03:14:07' UTC。它具有不同的属性,这取决于MySQL版本和服务器运行的SQL模式。这些属性将在本节后面描述。”
这显然会在28年内破坏你的软件。
我认为数据库方面的唯一解决方案是使用其他答案中提到的触发器。
您可以使用now()来设置datetime列的值,但请记住,不能将其用作默认值。
如果已经创建了表,则可以使用
更改默认值为当前日期时间
ALTER TABLE <TABLE_NAME>
CHANGE COLUMN <COLUMN_NAME> <COLUMN_NAME> DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;
修改默认值为'2015-05-11 13:01:01'
ALTER TABLE <TABLE_NAME>
CHANGE COLUMN <COLUMN_NAME> <COLUMN_NAME> DATETIME NOT NULL DEFAULT '2015-05-11 13:01:01';