Mysql 基于datefield更新时间戳列

Mysql 基于datefield更新时间戳列,mysql,sql,Mysql,Sql,我有一个超过50000个日期的表,我需要将其转换为时间戳字段 基本表格布局: Fieldname Type +------------------------+-----------+ | calendar_date | DATE | | calendar_unixtimestamp | TIMESTAMP | +------------------------+-----------+ 所以基本上: update calender

我有一个超过50000个日期的表,我需要将其转换为时间戳字段

基本表格布局:

  Fieldname                Type
+------------------------+-----------+
| calendar_date          | DATE      |
| calendar_unixtimestamp | TIMESTAMP |
+------------------------+-----------+
所以基本上:

update calender set calendar_unixtimestamp = UNIX_TIMESTAMP(calendar_date)
然而,这当然行不通。所以我尝试了另一种选择,在一些愚蠢的网站上告诉我,这似乎是合乎逻辑的。但是,无法使其工作:

update
  calendar t1
  join calendar t2 on t2.`calendar_date` = t1.`calendar_date`
set
  t1.calendar_unixtimestamp = UNIX_TIMESTAMP(t2.`calendar_date`)
where
  t1.`calendar_date` = t2.`calendar_date`
  

有人吗?

时间戳数据类型用于同时包含日期和时间部分的值,而UNIX\u时间戳返回无符号整数

您应该将
calendar\u unixtimestap
设置为INT

请看小提琴。

本杰明

我不是mysql方面的专家,但我认为您应该阅读以下内容:

特别是当它说:

默认情况下,第一个TIMESTAMP列同时具有默认的CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP(如果没有明确指定)

每当更新记录时,on UPDATE子句会使字段值更改为当前时间戳,因此您可以更新它,然后它会自动更改为当前时间戳,表中所有记录的时间戳都相同(或几乎相同)

也许你需要的是一个DATETIME列。时间戳列用于在创建和/或更新记录时进行注册。这在许多方面都很有用,包括多个用户尝试更新同一记录时的安全性或冲突解决

a) 如果这是您所需要的,您应该首先禁用更新时触发器,然后进行更新(您的第一个触发器正常),然后重新创建触发器(*)。只需添加一个WHERE条件,以确保不尝试更新null。同样,我不确定unix_timestamp是否是您需要的函数

    
    UPDATE calendar
    SET calendar_timestamp = TIMESTAMP(calendar.date) 
    WHERE calendar_date IS NOT NULL
b) 如果不是,只需将新列的类型更改为DATETIME即可


(*)注意:可能更容易删除列,然后使用DEFAULT子句创建它,但不使用ON UPDATE子句,或者指定NULL子句。

为什么说它不起作用?会发生什么?日历日期是日期列还是varchar列?当然,对不起。它不会更新任何东西。好像什么都没发生。然而,我为添加的配偶添加了表结构。关键是,im当前正在运行jFlot脚本的时间戳输出,这需要时间戳。我不希望每个select都有blabla提供的select unix_时间戳(日期)。这就是我想更新所有collumns的原因。时间戳的默认值实际上是current_timestamp(),那么您应该检查是否还有ON UPDATE触发器。如果有,应该删除该列,然后使用默认的CURRENT_TIMESTAMP()条件重新创建它,但不使用ON UPDATE条件。否则,您将无法更新该字段。很抱歉我的帖子中的所有编辑。我刚刚接触stackoverflow:)