我在几年内没有使用MySQL,当我创建一个新表时,它做了一些我没想到的东西.我正在使用MariaDB v5.5.60-MariaDB
我需要创建一个包含已创建列和更新列的表.
我需要创建的列只在创建行时设置为CURRENT_TIMESTAMP,然后永远不会更改,除非我明确地更改它.
我需要在创建行和更改行时将更新列设置为CURRENT_TIMESTAMP.
如果我执行以下操作:
CREATE TABLE user_prefs (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
user VARCHAR(255) NOT NULL,
provider VARCHAR(255) NOT NULL,
pref VARCHAR(128) NOT NULL,
jsondata LONGTEXT,
created timestamp NOT NULL,
modified timestamp NOT NULL,
PRIMARY KEY (id),
UNIQUE INDEX id_UNIQUE (id ASC));
然后将创建的列设置为:
更新CURRENT_TIMESTAMP上的DEFAULT CURRENT_TIMESTAMP
并将修改后的列设置为:
DEFAULT’0000- 00:00:00′
如果我试试这个:
CREATE TABLE user_prefs (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
user VARCHAR(255) NOT NULL,
provider VARCHAR(255) NOT NULL,
pref VARCHAR(128) NOT NULL,
jsondata LONGTEXT,
created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
modified timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE INDEX id_UNIQUE (id ASC));
然后我得到错误**错误代码:1293.表定义不正确;在DEFAULT或ON UPDATE子句中只能有一个TIMESTAMP列和CURRENT_TIMESTAMP
**
那么有没有办法在创建行时自动设置创建和修改,然后在每次更改行时更改修改?
提前致谢.
解决方法:
你可以为此创建触发器
DELIMITER //
CREATE TRIGGER user_prefs_before_insert
BEFORE INSERT
ON user_prefs FOR EACH ROW
BEGIN
SET NEW.updated = new.created;
END; //
DELIMITER ;
然后是另一个更新触发器
DELIMITER //
CREATE TRIGGER user_prefs_before_update
BEFORE UPDATE
ON user_prefs FOR EACH ROW
BEGIN
SET NEW.updated = CURRENT_TIMESTAMP();
END; //
DELIMITER ;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。