ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe
При переходе на MySQL 5.5 с репликацией стали возникать ошибки:
1 2 3 4 5 6 7 |
Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe Statement: INSERT INTO Table (zabbix_event_id, next_report_after) VALUES (8273354, NOW()), (8273312, NOW()) ON DUPLICATE KEY UPDATE next_report_after = next_report_after |
Таблица при этом выглядела так:
1 2 3 4 5 6 7 |
CREATE TABLE IF NOT EXISTS Table ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `uniq` INT(10) UNSIGNED NOT NULL, `next_report_after` DATETIME NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY ( `uniq` ) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
Собственно, в MySQL 5.5 «пофиксили баг«, что свелось к тому, что теперь нельзя реплицировать результаты запросов, в которых есть ON DUPLICATE KEY UPDATE и больше одного уникального ключа.
Пришлось переделывать логику с выпиливанием столбца uniq.
В общем, MySQL молодцы, сломали обратную совместимость для устранения мелкого бага.
Ссылка на документацию — http://docs.oracle.com/cd/E17952_01/refman-5.5-en/insert-on-duplicate.html (об этом в самом низу).
Similar Posts
- None Found
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.
One Response so far.