2013-05-13 73 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