我使用mysql来更新表中的一个字段,当条件满足时...Mysql更新之前首先检查是否有必要或只是更新?
我应该首先做一个SELECT来查看条件是否满足或者我只是尝试每次都使用UPDATE,因为如果条件不符合,什么都不会发生。
要具体,这是我的选择:
SELECT * FROM forum_subscriptions
WHERE IDTopic=11111 AND IDUser=11111 and status=0
我检查在这里如果我在论坛主题11111,如果,如果我(用户ID 1)订购这一主题,我的状态订阅为0(这意味着他并没有收到电子邮件有关话题的新职位)
所以,当这满足做:
UPDATE forum_subscriptions SET Status=1 where IDTopic=11111 AND IDUser=1
现在我想知道,我总是做一个选择这里询问如果用户订阅了这个主题,并且他有一个他访问该主题的状态,那么任何新帖子都不会触发新的电子邮件通知。当他再次访问该页面时,会触发更新以重置访问,以便任何新帖子将再次向他发送电子邮件。
因此,如果每个用户订阅或不测试订阅,则选择每个用户。只有在必要时才进行更新。
使用更新更好吗?要尝试在每个页面上更新,如果他没有订阅该主题,它将不会更新任何内容。
更新不会产生任何有效数据的速度有多快?内部是如何制作的,更新如何查找是否有任何记录,它是否选择并更新?如果是这样,只更新会更好,因为我会在不减速的情况下实现同样的目标。如果更新比选择更贵,我应该先尝试检查,然后根据需要进行更新。
这个例子是一个真实的例子,但是这个更新/ select的逻辑实际上是我感兴趣的,因为我更经常发现这种类型的问题。
感谢名单
UPDATE:感谢名单都可以的,但我不上你的链接看是否更新锁定,即使没有结果还是不行。当你给出不同的答案时,我仍然不知道该怎么做。
订阅表实际上不需要是myisam,我可以将它更改为InnoDB,因为我不需要全文。这是一个很好的解决方案,只使用更新并将此小表更改为inno?混合表类型有什么缺点?
语句条件是你是问关于'InnoDB'或'MyISAM'表? – 2011-05-26 15:29:48
我使用myISAM表,但我想我可以使用这个订阅表是INNODB,因为我不需要全文...它是否聪明将其更改为innodb并仅使用更新? – Jerry2 2011-05-26 16:11:09