2013-05-13 71 views
3

我在写一个PHP脚本,我需要生成唯一代码。这些代码由管理员用户每次生成100K。我有一个生成代码的算法,但是重复会进入混合的机会很小 - 大概有0.001%的机会,但仍然可能导致问题。具有唯一约束的批量插入语句

我期待运行BULK INSERT语句:

INSERT INTO coupons ('code') VALUES ('code1'),('code2'),('code3'); 

这将有它的100K码。我想知道的是,如果它们都是唯一的,除非让我们说code100将在该代码处插入停止,否则将继续插入其余部分,并通过警告让我知道。

如果在第一个副本中最终失败,我该怎么办?性能不是一个大问题,因为它是一个管理区域,我可以把这个过程转到完成。

+0

我最终创建了一个类来检查生成的代码,然后只插入唯一的代码,然后再次启动该过程,直到数量满足为止。在性能方面表现很好,因为它可以轻松地在后台插入几百万条记录,而不会让公众网站感到紧张。 – 2013-07-12 15:03:53

+0

我有类似的问题。你能否详细说明你如何去做这件事? – FBP 2017-04-05 18:20:55

回答

2

如果在批量插入中发现重复项,整个插入将失败 - 不仅仅是重复之后的所有项。如果性能不是问题,并且无论是否丢失一些插入内容,都可以单独执行每个INSERT声明。否则,请更新您的算法以在生成代码时检查重复项。

+0

是的,我可以做到这一点。性能不是一个**大**问题,但是如果管理员要求输入100K代码,我不能让该脚本至少100K次触及数据库。 – 2013-05-13 21:40:59