Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 是否可能有一个时间戳列在一个列被更新时被更新?_Mysql_Ruby On Rails - Fatal编程技术网

Mysql 是否可能有一个时间戳列在一个列被更新时被更新?

Mysql 是否可能有一个时间戳列在一个列被更新时被更新?,mysql,ruby-on-rails,Mysql,Ruby On Rails,有一个问题,当一列被更新时(仅该列),是否可能有一个时间戳列被更新 提前多谢 您可以使用: 分隔符;; 为每行在my_表上更新之前创建触发器foo 如果NEW.colA OLD.colA--尚未更新 和NEW.colB OLD.colB--尚未更新 而不是NEW.colC OLD.colC--已更新 --等等。 然后 设置NEW.colD=NOW();--更新时间戳 如果结束 ;; 定界符; 请注意,时间戳列未启用。您可以使用: 分隔符;; 为每行在my_表上更新之前创建触发器foo 如果NE

有一个问题,当一列被更新时(仅该列),是否可能有一个时间戳列被更新

提前多谢

您可以使用:

分隔符;;
为每行在my_表上更新之前创建触发器foo
如果NEW.colA OLD.colA--尚未更新
和NEW.colB OLD.colB--尚未更新
而不是NEW.colC OLD.colC--已更新
--等等。
然后
设置NEW.colD=NOW();--更新时间戳
如果结束
;;
定界符;
请注意,
时间戳列未启用。

您可以使用:

分隔符;;
为每行在my_表上更新之前创建触发器foo
如果NEW.colA OLD.colA--尚未更新
和NEW.colB OLD.colB--尚未更新
而不是NEW.colC OLD.colC--已更新
--等等。
然后
设置NEW.colD=NOW();--更新时间戳
如果结束
;;
定界符;

请注意,
时间戳列未启用。

当然。您可以将timestamp列定义为datetime,然后在满足条件时使用触发器更新它

粗略的语法是:

CREATE TRIGGER trigger_name AFTER UPDATE ON table FOR EACH ROW
BEGIN
  IF(
     NOT NEW.watched_column <=> OLD.watched_column AND
     NEW.other_a <=> NEW.other_a AND
     ...
    )
  THEN
     SET NEW.timestamp_column = NOW();
  END IF;
END
为每行更新表后创建触发器名称
开始
如果(
不是新的。监视的列旧的。监视的列和
新的
...
)
然后
设置NEW.timestamp_column=NOW();
如果结束;
结束

当然可以。您可以将timestamp列定义为datetime,然后在满足条件时使用触发器更新它

粗略的语法是:

CREATE TRIGGER trigger_name AFTER UPDATE ON table FOR EACH ROW
BEGIN
  IF(
     NOT NEW.watched_column <=> OLD.watched_column AND
     NEW.other_a <=> NEW.other_a AND
     ...
    )
  THEN
     SET NEW.timestamp_column = NOW();
  END IF;
END
为每行更新表后创建触发器名称
开始
如果(
不是新的。监视的列旧的。监视的列和
新的
...
)
然后
设置NEW.timestamp_column=NOW();
如果结束;
结束

这需要通过代码来完成。MySQL数据库上的时间戳将在任何字段更新时更新简短的回答是“否”。。。至少,不是自动的。当然,它可以是自动的,有一个触发器@anakata如果它要求您编写代码(无论是在应用程序中还是在数据库中),那么它不是自动的。@BrianDriscoll:但是触发器会被自动调用,这几乎可以肯定是anakata的意思。否则,您的论点可以同样适用于任何形式的配置,这意味着只有自然事件是“自动的”——当然不是任何人都认真赞同的定义——这需要通过代码来完成。MySQL数据库上的时间戳将在任何字段更新时更新简短的回答是“否”。。。至少,不是自动的。当然,它可以是自动的,有一个触发器@anakata如果它要求您编写代码(无论是在应用程序中还是在数据库中),那么它不是自动的。@BrianDriscoll:但是触发器会被自动调用,这几乎可以肯定是anakata的意思。否则,你的论点可以同样适用于任何形式的配置,这意味着只有自然事件是“自动的”——当然不是任何人都认真赞同的定义?嗨,艾格亚尔,非常感谢你的回答!我收到以下错误:“您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以了解在第1行“DELIMITER”附近使用的正确语法:“我尝试使用不同的字符作为限制符(#,/,/,/,|),但我始终收到相同的错误:”(@Alejandra:What client you use?
DELIMITER
是一个客户端命令,mysql命令行工具可以识别它。听起来好像你的客户端正试图将它传输到服务器,在那里它毫无意义。你必须检查客户端的文档,以发现如何调整它的语句分隔符。哟你是对的!我正在写一个迁移(rails),但“分隔符”一词没有被识别:)我只是在查询之间放置了一个字符“^”,并放置了类似sql.split(“^”)的东西。每个都执行sq,除非sq.blank?endHi Eggyal,非常感谢你的回答!我得到以下错误“您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以了解在第1行“DELIMITER”附近使用的正确语法:“我尝试使用不同的字符作为限制器(#,/,/,/,|),但我总是遇到相同的错误:”(@Alejandra:What client you use?
DELIMITER
是一个客户端命令,mysql命令行工具可以识别它。听起来好像你的客户端正试图将它传输到服务器,在那里它毫无意义。你必须检查客户端的文档,以发现如何调整它的语句分隔符。哟你是对的!我正在写一个迁移(rails),但“分隔符”一词没有被识别:)我只是在查询之间放置了一个字符“^”,并放置了类似sql.split(“^”)的内容。每个都执行sq,除非sq.blank?end非常感谢你的快速回答:)非常感谢你的快速回答:)