ВСТАВИТЬ … НА ДУБЛИРУЮЩЕМСЯ КЛЮЧЕВОМ ОБНОВЛЕНИИ с ГДЕ?

Я делаю a INSERT ... ON DUPLICATE KEY UPDATE но мне нужна часть обновления для условного выражения, только делая обновление, если некоторое дополнительное условие изменилось.

Однако WHERE не позволяется на этом UPDATE. Есть ли какое-либо обходное решение для этого?

Я не могу сделать, комбинации ВСТАВЛЯЮТ/ОБНОВЛЯЮТ/ВЫБИРАЮТ, так как это должно работать по репликации.

40
задан Fluffeh 7 August 2012 в 09:34
поделиться

2 ответа

вы можете использовать два оператора вставки... поскольку вы можете добавить предложение where к части select для исходных данных.

выберите два набора данных, один из которых будет вставлен с 'on duplicate', а другой будет вставлен без 'on duplicate'.

3
ответ дан 27 November 2019 в 01:34
поделиться

Это наше окончательное решение, работает как шарм!

Игнорирование вставки гарантирует, что строка существует как на главном, так и на подчиненном устройстве, на случай, если они когда-либо перенаправлялись.

Обновление ... где гарантирует, что только самое последнее глобальное обновление является конечным результатом после выполнения всей репликации.

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();
12
ответ дан 27 November 2019 в 01:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: