Я делаю a INSERT ... ON DUPLICATE KEY UPDATE
но мне нужна часть обновления для условного выражения, только делая обновление, если некоторое дополнительное условие изменилось.
Однако WHERE
не позволяется на этом UPDATE
. Есть ли какое-либо обходное решение для этого?
Я не могу сделать, комбинации ВСТАВЛЯЮТ/ОБНОВЛЯЮТ/ВЫБИРАЮТ, так как это должно работать по репликации.
вы можете использовать два оператора вставки... поскольку вы можете добавить предложение where к части select для исходных данных.
выберите два набора данных, один из которых будет вставлен с 'on duplicate', а другой будет вставлен без 'on duplicate'.
Это наше окончательное решение, работает как шарм!
Игнорирование вставки гарантирует, что строка существует как на главном, так и на подчиненном устройстве, на случай, если они когда-либо перенаправлялись.
Обновление ... где гарантирует, что только самое последнее глобальное обновление является конечным результатом после выполнения всей репликации.
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();