[英]Mysql insert multiple unique rows
想知道是否可以完成此過程而沒有任何數據錯誤。 使用PHP7和MySQL innoDB。 這仍處於理論階段,如果您能在項目開始前給出良好的建議和建議,將會有很大的幫助。
情況將是存在多個事務,並且即使在幾微秒內也可能同時發生多個事務。 transaction
表將具有一個哈希列,其中哈希值是該交易的所有信息+鹽+先前哈希值條目(如果存在)的哈希值。
該過程將是:
我擔心的是,如果多個事務同時發生,是否有可能使用前一個事務的相同哈希值進行多個事務?
例如,最新的Tx哈希值是abcd。 如果5個新事務在微秒內同時進行,那5個會使用相同的最新Tx哈希值abcd嗎? 我試圖實現的結果是,它將是有序的並且正確使用了最新的哈希值。
[編輯]讓我嘗試更清楚地解釋。
hash(info + timestamp)
=“ acbd” hash(info + timestamp + "abcd")
=“ cdfg” hash(info + timestamp + "cdfg")
=“ hijk” 我擔心的是,如果在第三次交易之后的3毫秒或十億分之一秒內同時輸入3筆交易,新的3筆交易會如下嗎? (第四筆交易仍使用先前的哈希值進行哈希處理,而第五筆交易和第六筆交易也使用相同的先前哈希值進行哈希處理,而第四筆交易甚至無法完成並更新至數據庫):
hash(info + timestamp + "hijk")
=“ 12sd” hash(info + timestamp + "hijk")
=“ x3sd” hash(info + timestamp + "hijk")
=“ n76h” 我希望並希望我的結果是:
hash(info + timestamp + "hijk")
=“ 12sd” hash(info + timestamp + "12sd")
=“ mn34” hash(info + timestamp + "mn34")
=“ 09lk” 計划B是(您怎么看?):
取決於您的哈希函數用作參數的方式。 讓我教您哈希函數背后的數學美:
散列函數的目的是不產生沖突並且具有魯棒性 。
f
作為哈希函數,將x
和y
視為兩個不同的字符串。 如果存在兩個不同的字符串x
和y
,那么f(x) = f(y)
就會發生沖突。 顯然這不是很好 。 因此,哈希函數的設計使其不會產生沖突。 x
和y
是兩個相等的字符串。 無論何時在相同的字符串上運行,我們都希望哈希函數返回相同的值,因此哈希函數是健壯的,如果對於x = y
,它也是f(x) = f(y)
。 現在我們知道了,我們必須問自己要傳遞給哈希函數的內容。 顯然,每個用戶之間都有一些區別,例如密碼,用戶名,電子郵件以及它們的組合。 我們也可以添加一些鹽 ,例如日期,以使其更復雜,但實際上沒有必要。
因此,基本上,您要擔心的只是要散列的數據,即用戶名,數量等。由於PHP腳本將針對每個事務分別運行,並且由於要散列的數據會有所不同(數量,時間等可能相同,但用戶名會有所不同),因此無需擔心沖突。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.