如何使用列时间戳默认 current_date 创建 mysql 表?
Posted
技术标签:
【中文标题】如何使用列时间戳默认 current_date 创建 mysql 表?【英文标题】:How to create mysql table with column timestamp default current_date? 【发布时间】:2016-03-28 20:23:21 【问题描述】:我需要在 CURRENT_DATE() 列上创建具有默认值的 mysql 表
我试试
DROP TABLE IF EXISTS `visitors`;
CREATE TABLE `visitors` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`ip` VARCHAR(32) NOT NULL,
`browser` VARCHAR(500) NOT NULL,
`version` VARCHAR(500) NOT NULL,
`platform` ENUM('w','l','m') NOT NULL,
`date` TIMESTAMP NOT NULL DEFAULT CURRENT_DATE(),
PRIMARY KEY (`id`),
UNIQUE KEY `person` (`ip`,`date`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
但是写错了
Query: CREATE TABLE `visitors` ( `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, `ip` VARCHAR(32) NOT NULL, `browser` VARCHAR(500) NO...
Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURRENT_DATE() NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `person` (`ip`,`date`)
) ENGINE=INNODB AUTO_INCREMENT=1' at line 7
Execution Time : 0 sec
Transfer Time : 0 sec
Total Time : 0.063 sec
有什么问题?
我需要唯一的日期 没有全职信息...
你能帮帮我吗?
【问题讨论】:
这是TIMESTAMP
列的默认行为。在这种情况下,您实际上不需要指定 DEFAULT
。
TIMESTAMP 和 DATE 的格式不同,Timestamp 是一个数字,而 date 是一个格式化的日期。任选其一。
如果你只需要年月日,为什么不试试'date' DATE NOT NULL DEFAULT CURRENT_DATE()
。
【参考方案1】:
使用 CURRENT_TIMESTAMP 函数代替 CURRENT_DATE() 函数
试试这个:
DROP TABLE IF EXISTS `visitors`;
CREATE TABLE `visitors` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`ip` VARCHAR(32) NOT NULL,
`browser` VARCHAR(500) NOT NULL,
`version` VARCHAR(500) NOT NULL,
`platform` ENUM('w','l','m') NOT NULL,
`date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `person` (`ip`,`date`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
【讨论】:
no CURRENT_TIMESTAMP 也在设置小时、分钟和秒的全时信息。我只需要年月日 一种选择是将其设置为时间戳,如图所示,但是当您实际检索数据时,只需将其转换为日期,这将截断小时、分钟和秒。SELECT DATE(
date)
将以您想要的格式返回它,同时仍保留您想要的列行为。
我明白,但我需要用年、月和日期来唯一的 IP,所以如果我在 2-3 秒前将它作为时间戳唯一,它将再次插入新行...我需要唯一的,因为刷新后如果今天存在 IP,则不能在表格中写入,因为我只需要日期格式【参考方案2】:
您只需在查询中将 CURRENT_DATE() 替换为 NOW()。 我试过了,看起来还可以。
【讨论】:
NOW() 在 mysql 中将被视为CURRENT_TIMESTMAP
【参考方案3】:
这可能有点晚了,但我认为它可能对其他人有帮助。
我的方法是像这样使用 getdate():
[TimeStamp] [datetime] NOT NULL CONSTRAINT [DF_myTable_TimeStamp] DEFAULT (getdate())。
其中 [TimeStamp] 是相关列。
结果例如:2017-11-02 11:58:34.203
为了修剪这个,我使用以下内容
声明@mydate 日期时间
设置@mydate = '2017-11-02 11:58:34.203'
选择 try_convert(nvarchar(20), @mydate, 120)
这个最终结果是:2017-11-02 11:58:34
You can actually set this in MSSQL Management Studio
【讨论】:
以上是关于如何使用列时间戳默认 current_date 创建 mysql 表?的主要内容,如果未能解决你的问题,请参考以下文章
如何使mysql在每次修改行操作时自动将列更新为当前时间戳?