Mysql 设计:多用户评论系统
我试图找到一个好的解决方案,让多个用户(版主)在一个通用的评论系统上工作 我现在拥有的 +Mysql id、用户id、注释、日期、状态表 通过选择所有未批准的评论,未批准的评论将显示在版主页面中。版主查看评论后,可以使用适当的按钮(简单的更改状态或删除语句)批准/删除评论。如果只有一个版主,这就可以了 如果有多个主持人,我如何确保他们之间的一致性。例如,一旦第一位版主批准/删除了一条评论,我如何确保将该评论从所有其他版主列表中删除。我可以在mysql表上确保每个评论只更改一次,但我不希望有多个版主处理同一条评论(浪费资源)。如果所有版主都需要查看所有评论,那么没有完美的解决方案:如果版主A和B都在未经批准的评论列表上查看评论X,两者都单击“查看”,并且A在B之前批准或拒绝它,然后当B单击“接受”或“拒绝”时,存在必须以某种方式解决的冲突。即使您以某种方式强制所有浏览器会话在更新到达数据库时从服务器端刷新查看未经批准的注释列表,您最多也可以减少发生此类冲突的机会;总有一个小窗口,当这不再是一个有效的操作时,B可以在其中单击“接受”或“拒绝” 您可以:Mysql 设计:多用户评论系统,mysql,algorithm,web,Mysql,Algorithm,Web,我试图找到一个好的解决方案,让多个用户(版主)在一个通用的评论系统上工作 我现在拥有的 +Mysql id、用户id、注释、日期、状态表 通过选择所有未批准的评论,未批准的评论将显示在版主页面中。版主查看评论后,可以使用适当的按钮(简单的更改状态或删除语句)批准/删除评论。如果只有一个版主,这就可以了 如果有多个主持人,我如何确保他们之间的一致性。例如,一旦第一位版主批准/删除了一条评论,我如何确保将该评论从所有其他版主列表中删除。我可以在mysql表上确保每个评论只更改一次,但我不希望有多个版
SELECT
进行“检查”,只有在UPDATE
之后,这两个命令之间可能会潜入其他命令。(在单个DB事务中可以安全地使用单独的SELECT
和UPDATE
命令,但只有在您确信了解DB使用的并发模型的情况下才可以这样做;例如,对于PostgreSQL,我相信您需要在通常的READ C中将FOR UPDATE
添加到原始SELECT
OMMITTED
事务隔离级别。)
我只建议
UPDATE comments
SET status = true
WHERE userid = ?
AND id = ?
AND status = false
最后一行意味着您将能够通过检查受影响的行数来检查该命令是否实际成功:如果其他主持人在您之前偷偷地进行了更改,则该更改将为0而不是1