无法在1个MySQL表中创建2个时间戳列

时间:2012-07-22 14:18:32

标签: mysql sql time

我的sql查询看起来像这样

ALTER TABLE `exercises`
ADD COLUMN `creation_dt`  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER `lesson_id`,
ADD COLUMN `modification_dt`  timestamp NULL DEFAULT '' ON UPDATE CURRENT_TIMESTAMP AFTER `creation_dt`;

但收到错误消息

enter image description here

如何解决此问题?

4 个答案:

答案 0 :(得分:1)

如屏幕截图所示,这是错误代码1293The reason for this error seems to be some implementation details in MySQL.

您可以使用DATETIME类型的列来绕过它,但这不允许将当前时间设置为default值。但是,您可以在应用程序代码中使用trigger来解决此问题。我使用了一个示例表(称为datetimetest)并添加了这样的触发器:

数据库架构:

CREATE TABLE `datetimetest` (
    `id` int(11) NOT NULL,
    `created` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TRIGGER trigger_SetCreated
  BEFORE INSERT ON datetimetest
  FOR EACH ROW SET NEW.created = UTC_TIMESTAMP();

您可以使用触发器modifiedBEFORE UPDATE字段执行相同的操作,或保留您的解决方案,因为现在只有一个TIMESTAMP列设置为CURRENT_TIMESTAMP { {1}}。

答案 1 :(得分:0)

一个表中不能有多个CURRENT_TIMESTAMP列。如果你真的需要,你可以使用'before insert'触发器来模仿它们。

答案 2 :(得分:0)

表中不能有多个时间戳,如果要在表中插入两个日期/日期时间,请转到一个时间戳和另一个日期时间类型。

答案 3 :(得分:-1)

时间戳不是您认为的那样:-)我认为您需要datetime列。