【发布时间】:2011-08-09 09:36:50
【问题描述】:
我正在用 C 语言开发一个将更新提交到 MySQL 数据库的系统。客户端并不总是在线,因此应用程序会将在服务器无法访问时执行的 SQL 命令保存到 *.sql 中。
我正在考虑在使用的表中添加一个名为 late_commit 的 BOOLEAN 字段,以便稍后在恢复连接时知道这些字段已插入到数据库中。
我可以更改程序中的编程逻辑以在插入查询中包含 late_commit 字段,但我宁愿将其设置为默认值 false 并且仅在 .sql 文件为被执行。
我想过用 alter 语句插入插入,但这似乎有点笨拙,并且会提供较差的性能。
我从未使用过触发器,但从我在此 SO question 中看到的情况来看,它们可以工作。但是,它们似乎不是临时的或会话本地的,这会干扰来自其他客户端的并发插入。
您对自己如何/将如何做到这一点有任何想法吗?不一定是要使用的查询,而是最适用的技术/方法。
编辑:
我认为如果没有其他解决方案,可能是创建一个具有相同结构且late_commit 默认为 true 的临时表,将数据插入其中,然后复制到主表中。
注意: 我用我找到的一些方法添加了答案。不过,我仍在寻找永久解决方案。所以请如果您知道如何做得更好,请发表评论或回答。谢谢!
【问题讨论】:
-
你可以使用准备好的语句吗?强烈建议多次插入,您可以将新字段的值设置为
true。 -
@Dor 我可以使用准备好的语句,总是在 java 中使用,但我对它在 c api 上采用的所有绑定语句有点不知所措。但请记住,如果我确实准备了语句,我仍然无法执行它,因为那时网络出现故障,也许可以在不执行的情况下提取准备好的语句,我会检查api。 - 这就是客户端无法连接到服务器的事实,这就是为什么我想将语句保存到一个 sql 文件中,以便系统稍后在连接恢复后执行。
标签: mysql