标记以及如何测试标记存在

时间:2010-03-18 15:03:44

标签: sql mysql multithreading

我计划使用Toxi方案存储标签(如Stackoverflow上的标签) 标签存储在单独的表中。

create table tags
(
   tagSeq int unsigned,
   name varchar(255),
   PRIMARY KEY (tagSeq),
   UNIQUE INDEX (name)
);

在添加标记用例中,多个并发线程将尝试检查特定标记是否存在;因此,它将成为争论的焦点。如果标记存在,则线程只需拉出tagSeq并在中间表中添加一行,将其与被标记的项链接。

我如何设计这个如果存在使用tagSeq,如果没有创建用例,以便在保持数据完整性的同时具有高并发性?例如,我应该使用什么隔离级别?

我目前的解决方案是每个传入的线程只执行一次INSERT。如果我得到一个UNIQUE KEY约束违规,我只需读回tagSeq。如果没有,我创建它。我在赛道上吗?

1 个答案:

答案 0 :(得分:0)

为什么不在检查/插入期间直接锁定表?

http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html