在MySQL中大概有四種方式可以避免資料的重複插入,我們以如下 user_basic_infor表為例,分別簡單介紹一下這幾種方式,user_basic_infor 的建表SQL語句如下,其中id 為主鍵索引,user_id為唯一索引。
如上,在 user_basic_infor 表中使用主鍵索引(PRIMARY KEY)以及唯一索引(UNIQUE KEY)確保資料具的唯一性,為避免重複寫入記錄可以使用 insert ignore into 語法,如下:
當使用 ignore 寫入資料時,如果出現錯誤,如重複記錄,語法錯誤將不返回錯誤,僅以警告形式返回。因此使用 ignore時,需要確保SQL語句本身沒有問題,否則也將會被忽略。
同樣,為避免重複寫入記錄也可以使用 on duplicate key update 語法,如下:
如果在 insert 語句末尾指定了on duplicate key update ……,在寫入行後會如果在主鍵索引(PRIMARY KEY)或者唯一索引(UNIQUE KEY)中出現重複值時,則在出現重複值的行執行 update ,如果不會導致唯一值列重複,則寫入該新行。
同樣,為避免重複寫入記錄也可以使用 replace into 語法,如下:
除此之外,在 MySQL 中,寫入一條記錄,我們可以先檢查這條記錄是否已經存在,如果記錄不存在則執行寫入操作,這樣可以不只透過主鍵索引(PRIMARY KEY)或者唯一索引(UNIQUE KEY)來判斷,也可透過其它欄位條件,如下:
在MySQL中大概有四種方式可以避免資料的重複插入,我們以如下 user_basic_infor表為例,分別簡單介紹一下這幾種方式,user_basic_infor 的建表SQL語句如下,其中id 為主鍵索引,user_id為唯一索引。
insert ignore into如上,在 user_basic_infor 表中使用主鍵索引(PRIMARY KEY)以及唯一索引(UNIQUE KEY)確保資料具的唯一性,為避免重複寫入記錄可以使用 insert ignore into 語法,如下:
當使用 ignore 寫入資料時,如果出現錯誤,如重複記錄,語法錯誤將不返回錯誤,僅以警告形式返回。因此使用 ignore時,需要確保SQL語句本身沒有問題,否則也將會被忽略。
on duplicate key update同樣,為避免重複寫入記錄也可以使用 on duplicate key update 語法,如下:
如果在 insert 語句末尾指定了on duplicate key update ……,在寫入行後會如果在主鍵索引(PRIMARY KEY)或者唯一索引(UNIQUE KEY)中出現重複值時,則在出現重複值的行執行 update ,如果不會導致唯一值列重複,則寫入該新行。
replace into同樣,為避免重複寫入記錄也可以使用 replace into 語法,如下:
insert … select … where not exist ……除此之外,在 MySQL 中,寫入一條記錄,我們可以先檢查這條記錄是否已經存在,如果記錄不存在則執行寫入操作,這樣可以不只透過主鍵索引(PRIMARY KEY)或者唯一索引(UNIQUE KEY)來判斷,也可透過其它欄位條件,如下: