MySQL 4.1到5.1复制:“ON DUPLICATE KEY UPDATE”和“ON UPDATE CURRENT_TIMESTAMP”不起作用

时间:2012-03-05 16:40:58

标签: mysql

我有一个带有MySQL 5.1 slave的MySQL 4.1 master的问题。 binlog格式是STATEMENT(4.1支持的唯一格式)。

问题是未在从站上复制触发器(“ON DUPLICATE KEY UPDATE”和“ON UPDATE CURRENT_TIMESTAMP”)。

假设我有这张表:

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

然后更新PKCol1,但不会更新。

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

感谢。

1 个答案:

答案 0 :(得分:0)

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

例如,如果您将Col1的值更新为“值2”(之前为“值1”),则会更新Stamp字段 。< / p>

如果您想确保它始终更新,无论是否实际更改了任何值,那么您应该将UPDATE查询更改为:

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