And*_*and 40 mysql replication
我正在做一个INSERT ... ON DUPLICATE KEY UPDATE但是我需要更新部分是有条件的,只有在某些额外条件发生变化时才进行更新.
但是,WHERE不允许这样做UPDATE.这有什么解决方法吗?
我不能组合INSERT/UPDATE/SELECT,因为这需要在复制上工作.
小智 61
我建议你使用IF()来做到这一点.
请参阅:condition-duplicate-key-updates-with-mysql
INSERT INTO daily_events (created_on, last_event_id, last_event_created_at)
VALUES ('2010-01-19', 23, '2010-01-19 10:23:11')
ON DUPLICATE KEY UPDATE
last_event_id = IF(last_event_created_at < VALUES(last_event_created_at), VALUES(last_event_id), last_event_id);
Run Code Online (Sandbox Code Playgroud)
And*_*and 12
这是我们的最终解决方案,就像一个魅力!
该插入忽略将确保在主机和从机都存在该行,万一他们曾经改行.
该更新...其中,确保只有最新的更新,全球范围内,为最终结果的所有复制完成后.
mysql> desc test;
+-------+--------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+-------------------+-------+
| id | int(11) | NO | PRI | NULL | |
| value | varchar(255) | YES | | NULL | |
| ts | timestamp | NO | | CURRENT_TIMESTAMP | |
+-------+--------------+------+-----+-------------------+-------+
mysql> insert ignore into test values (4, "foo", now());
mysql> update test set value = "foo", ts = now() where id = 4 and ts <= now();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39986 次 |
| 最近记录: |