我有一个带有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
然后更新PK
和Col1
,但不会更新。
我希望有人有一些见解,因为我在互联网上找不到任何东西。
感谢。
答案 0 :(得分:0)
Stamp
列未更新的原因是您将Col1
的值设置为与其相同的值。如果UPDATE
语句中没有实际更改的值,则Stamp
字段将不会更新。
例如,如果您将Col1
的值更新为“值2”(之前为“值1”),则会更新Stamp
字段 。< / p>
如果您想确保它始终更新,无论是否实际更改了任何值,那么您应该将UPDATE
查询更改为:
UPDATE Table1
SET Col1 = 'Value1', Stamp = CURRENT_TIMESTAMP
WHERE PK = 1