2

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

更新供应商自然加入 tmp_vendors 设置供应商.last_conn_time = tmp_vendors.last_conn_time

我在 mysqld.log 中不断得到的是:

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

那么有没有办法关闭这个警告(仅在当前的数据库连接上)或者有没有更好的做法呢?

4

2 回答 2

0

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

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

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

于 2012-07-19T15:22:38.287 回答
-2

Is your memtable indexed on 'vendor id' or similar? It sounds like the update to 'vendors' is getting confused by which entry for 'last_conn_time' to use. Would it be rational to keep only one entry / vendor in the memtable using 'insert.. on duplicate key update last_conn_time...'?

于 2012-07-19T14:28:34.160 回答