更新&&的MySQL不安全声明加入

时间:2012-07-19 14:18:51

标签: mysql unsafe

我在电子商务网站上工作,有大量供应商向其发送数据(或阅读通知),我需要为每个供应商保留最后一次连接的时间。由于供应商表的更新显示为不良做法(非常大量的更新,性能不佳),我创建了内存表,其中我存储了每个供应商的最后连接时间。那个时间比一分钟更新一次或两次。对于更新,我使用此查询:

  

更新供应商NATURAL JOIN tmp_vendors SET vendors.last_conn_time = tmp_vendors.last_conn_time

我在mysqld.log中得到的是:

  

[警告]自BINLOG_FORMAT = STATEMENT以来,使用语句格式将不安全语句写入二进制日志。从另一个表中选择后,使用自动增量列写入表的语句是不安全的,因为检索行的顺序决定了将写入哪些行(如果有)。此订单无法预测,可能在主设备和从设备上有所不同。

那么有没有办法关闭此警告(仅限当前数据库连接)或者有更好的做法吗?

2 个答案:

答案 0 :(得分:0)

如果从属服务器断电,则内存表将为空,这将导致复制问题。因此,只要您从内存表中更新表,就可能会收到此警告。

不幸的是,目前还没有办法在MySQL中禁止记录警告消息。

如果您提供更多详细信息,我们可能会为您现在的方式提供替代解决方案。

答案 1 :(得分:-2)

您的记忆是否以“供应商ID”或类似方式编入索引?这听起来像'供应商'的更新被'last_conn_time'的哪个条目使用混淆。使用'insert .. on duplicate key update last_conn_time ...'在memtable中只保留一个条目/供应商是否合理?