我的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`;
但收到错误消息
如何解决此问题?
答案 0 :(得分:1)
如屏幕截图所示,这是错误代码1293
。 The 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();
您可以使用触发器modified
对BEFORE UPDATE
字段执行相同的操作,或保留您的解决方案,因为现在只有一个TIMESTAMP
列设置为CURRENT_TIMESTAMP
{ {1}}。
答案 1 :(得分:0)
一个表中不能有多个CURRENT_TIMESTAMP
列。如果你真的需要,你可以使用'before insert'触发器来模仿它们。
答案 2 :(得分:0)
表中不能有多个时间戳,如果要在表中插入两个日期/日期时间,请转到一个时间戳和另一个日期时间类型。
答案 3 :(得分:-1)
时间戳不是您认为的那样:-)我认为您需要datetime
列。