Привет,

Я лечил 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

Ответить