0

我想做很多插入,但是一段时间后是否可以更新mysql。

例如,如果有一个查询,如

Update views_table SET views = views + 1 WHERE id = 12;

在视图达到 100 之前,是否可能无法存储此查询,然后运行以下命令,而不是从 100 次以上运行查询。

Update views_table SET views = views + 100 WHERE id = 12;

现在,假设已经完成,那么数据完整性问题就来了。假设有 100 个打开的 php 文件都将运行相同的查询。现在除非有增加缓存视图的锁定机制,否则多个文件可能具有相同的缓存视图值,所以假设进程 1 可能有 25 个缓存视图,php 进程 2 可能有 25 个视图和进程3 可能有来自文件的 27 个视图。现在假设进程 3 完成并将计数器增加到 28。然后假设 php 进程即将完成并且它在进程 3 之后完成,这意味着计数器将恢复到 26。

那么你们有没有快速但数据安全的解决方案。

谢谢

4

2 回答 2

2

只要您的查询使用相对views=views+5,就应该没有问题

仅当您将值存储在脚本中的某个位置,然后自己计算新值时,您可能会遇到麻烦。但是你为什么要这样做呢?实际上,你为什么要首先做这一切?:)

如果您不想使数据库过载,您可以使用UPDATE LOW_PRIORITY table set ...LOW_PRIORITY关键字会将更新操作放入队列中并等待表不再被读取或插入使用。

于 2011-03-28T21:55:46.493 回答
0

首先:通过这些查询:无论进程何时启动,UPDATE .. SET col = col + 1都是安全操作,因此它永远不会“减少”计数器。

关于'存储此查询,直到视图达到 100,然后运行以下命令而不是从 100 次以上运行查询':不是真的。您可以将计数器存储在更快的内存中(想到memcached),并使用一个偶尔将其传输到数据库的进程,或者将其存储在另一个带有AFTER UPDATE触发器的表中,但我真的没有看到这样做的意义.

于 2011-03-28T22:00:42.667 回答