我有一个系统,可以生成一批随机代码,每次最多100个。然后将它们插入到数据库中。我正在使用一个代码生成器,不太可能再次创建类似的代码,但要确保无论如何我都要检查数据库中是否有重复的代码。我的理论..。
$amount_of_codes
while ($x != $amount_of_codes)
{
$code = gencode();
$mysql_check = "SELECT code FROM data WHERE code = '$code'";
$mysql_check_result = mysql_query($mysql_check);
$check = mysql_num_rows($mysql_check_result);
if (!$check)
{
mysql_query("INSERT INTO data(code) values('$code')")
$x++
}
}看起来乱七八糟,还有更好的主意吗?
发布于 2012-10-16 17:46:04
为Code列提供唯一约束:
CREATE TABLE Code
(
Code ..
..
CONSTRAINT Code_Unique UNIQUE (Code),
..
);在插入时,您只需要捕获数据库异常/错误,而不必担心代码是否已经存在。
发布于 2012-10-16 17:47:07
这是混乱的。更重要的是,它还受到竞争条件的影响,另一个进程可能会在您的check和insert之间插入该代码。
如果您想避免这种情况,请使code列成为唯一的键,然后尝试插入它。如果它已经存在,原子操作将返回错误或引发异常,您可以检查/捕获这些异常。
通过执行尝试后检查,您不会丢失任何东西,因为您无论如何都必须进行检查(以防前面提到的竞争条件咬到您)。但你得到的是原子性和更干净的代码。
发布于 2012-10-16 17:51:12
非常简单的解决方案,确保你放入代码中的函数不会放入已经存在的代码中。
基本上:
生成代码
检查代码是否存在
是,->生成新代码
没有->将代码放入数据库
没时间写脚本了对不起
https://stackoverflow.com/questions/12911810
复制相似问题