Привет, Я лечил INSERT ON DUPLICATE KEY UPDATE конструкцией моменты, когда надо инсертнуть или апдейтнуть и ты не знаешь есть запись или нет и не хочешь попасть на race .
Во-вторых никто не мешает сделать это (и так даже ACID'нее) триггерами или процедурами - они не кусаются - проверено. --- Оригінальне повідомлення --- Від кого: "Golub Mikhail" <[email protected]> Дата: 19 квітня 2016, 15:54:15 > Доброго времени суток. > > Есть у меня в Exim разные списки (черные, белые, серые ...) в MySQL. > Я когда-то сделал проверку и обновление метки времени разными запросами. > Все работало хорошо. > И тут захотелось объединить SELECT и UPDATE в одно условие. > Ни к чему хорошему это не привело. > > В табличке два поля - IP и дата внесения (или обновления) записи в таблице. > > Есть два макроса: > SELECT_WHITELIST = SELECT 1 from `whitelist` where > sender_ip='${quote_mysql:$sender_host_address}'; > UPDATE_WHITELIST = UPDATE whitelist set date=now() where > sender_ip='${quote_mysql:$sender_host_address}'; > > И есть правило: > warn condition = ${lookup mysql{SELECT_WHITELIST}} > set acl_m_white = 1 > condition = ${lookup mysql{UPDATE_WHITELIST}} > > Все работает как задумано - отрабатывает select и update. > > > Но решил заменить два макроса на один. Типа так: > CHECK_WHITELIST = UPDATE whitelist set date=now() where > sender_ip='${quote_mysql:$sender_host_address}'; > > Если IP нет в таблице - обновлять нечего. Возвращается 0. > Если IP есть - обновляется время изменения и возвращается 1. > > И в "тепличных условиях" оно так и работает. А на практике нет :( > Иногда хост, который в табличке whitelist, попадает на спам-фильтр. > > -- > Golub Mikhail > > _______________________________________________ > Exim-users mailing list > [email protected] > http://mailground.net/mailman/listinfo/exim-users _______________________________________________ Exim-users mailing list [email protected] http://mailground.net/mailman/listinfo/exim-users
