微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MariaDB / MySql:在CREATE上设置CURRENT_TIMESTAMP并在UPDATE上更改注释

我在几年内没有使用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] 举报,一经查实,本站将立刻删除。

相关推荐