MySQL 4.1到5.1复制:“重复密钥更新时”和“更新当前时间戳时”不工作

MySQL 4.1到5.1复制:“重复密钥更新时”和“更新当前时间戳时”不工作,mysql,Mysql,我对MySQL 4.1主服务器和MySQL 5.1从服务器有问题。binlog语句格式是4.1支持的唯一语句格式 问题是复制密钥更新和更新当前_时间戳时的触发器没有在从机上复制 假设我有这张桌子: CREATE TABLE Table1 ( PK INT NOT NULL AUTO_INCREMENT, Col1 VARCHAR(30) NOT NULL Stamp TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_

我对MySQL 4.1主服务器和MySQL 5.1从服务器有问题。binlog语句格式是4.1支持的唯一语句格式

问题是复制密钥更新和更新当前_时间戳时的触发器没有在从机上复制

假设我有这张桌子:

CREATE TABLE Table1 (
  PK INT NOT NULL AUTO_INCREMENT,
  Col1 VARCHAR(30) NOT NULL
  Stamp TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY  (PK)
);
案例1:根据这一陈述:

INSERT INTO Table1 (PK, Col1) 
VALUES (1, 'Value1') 
ON DUPLICATE KEY UPDATE Col1 = VALUES(Col1)
如果PK=1的行已经存在,则该语句的行为类似于INSERT IGNORE。。。没有插入任何内容

案例2:如果我跑步

UPDATE Table1 
SET Col1 = 'Value2' 
WHERE PK = 1
然后更新PK和Col1,但不更新Stamp

我希望有人有一些见解,因为我没有在互联网上找到任何东西


谢谢。

啊,我知道有问题了。Stamp列未更新的原因是,您正在将Col1的值设置为与原来相同的值。如果UPDATE语句中没有实际更改的值,则戳记字段将不会更新

例如,如果您正在将Col1的值更新为“Value2”,而它以前是“Value1”,则戳记字段将被更新

如果要确保它始终更新,而不管是否实际更改了任何值,则应将更新查询更改为:

UPDATE Table1 
SET Col1 = 'Value1', Stamp = CURRENT_TIMESTAMP
WHERE PK = 1

啊,我明白问题所在了。Stamp列未更新的原因是,您正在将Col1的值设置为与原来相同的值。如果UPDATE语句中没有实际更改的值,则戳记字段将不会更新

例如,如果您正在将Col1的值更新为“Value2”,而它以前是“Value1”,则戳记字段将被更新

如果要确保它始终更新,而不管是否实际更改了任何值,则应将更新查询更改为:

UPDATE Table1 
SET Col1 = 'Value1', Stamp = CURRENT_TIMESTAMP
WHERE PK = 1

尝试使戳记不为空。尝试使戳记不为空。感谢您的回复。也许我的例子是错误的,因为我实际上正在用不同的数据更新行,但它仍然不起作用。Stamp列在master上更新,但在slave上不更新。对不起,我想我不熟悉MySQL的master/slave配置。这种设置的目的是什么?是否始终拥有数据库的克隆?修改查询以始终显式更新Stamp列对您有用吗?在重新阅读您的问题后,我发现有人清楚地指出问题在于触发器没有在从机上执行,但这可能是一个解决方案。感谢您的回答。也许我的例子是错误的,因为我实际上正在用不同的数据更新行,但它仍然不起作用。Stamp列在master上更新,但在slave上不更新。对不起,我想我不熟悉MySQL的master/slave配置。这种设置的目的是什么?是否始终拥有数据库的克隆?修改查询以始终显式更新Stamp列对您有用吗?在重新阅读您的问题后,我发现有人清楚地指出,问题在于触发器没有在从机上执行,但这可能是一个解决方案。