如何使用列时间戳默认 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 表?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Hibernate 设置与数据库无关的默认列时间戳

如何通过光标获取android中的时间戳列值?

如何在 SQuirreL 中增加 DB2 查询结果的规模?

如何使mysql在每次修改行操作时自动将列更新为当前时间戳?

如何设置像'YYYYMM'这样的Postgresql默认值日期戳?

时间戳有多少个默认版本