我們在用insert往數據表中插入數據時,為了不重復插入數據,往往先在數據表中查詢一下該條數據是否已經存在,若不存在才進行插入。
這樣比較麻煩。
找到一個方法:使用 insert if not exists語句,就不需做上述兩道工序,輕松防止插入重復數據。
語法:
INSERT INTO TABLE (field1, field2, fieldn) SELECT 'field1', 'field2', 'fieldn' FROM DUAL WHERE NOT EXISTS ( SELECT field FROM TABLE WHERE field = ? )
舉例:(user_form表userId為主鍵,userName字段不希望插入重復數據)
INSERT INTO user_inform (userId, userName,name) SELECT 5, 'ad1', '小張' FROM DUAL WHERE NOT EXISTS ( SELECT userName FROM user_inform WHERE userName = 'ad1' )
第一次運行時,運行結果:
受影響的行: 1
插入成功。
再次運行,運行結果:
受影響的行: 0
達到效果,並未插入重復數據。
如果希望userName和name兩個字段不能同時重復,則修改為如下代碼(修改了括號中的最后一個where語句),
INSERT INTO user_inform (userId, userName,name) SELECT 5, 'ad1', '小張' FROM DUAL WHERE NOT EXISTS ( SELECT userName FROM user_inform WHERE userName = 'ad1' and name = '小張' )
另外,還可通過使用mysql的索引,同時使用“insert ignore into”語句,這個方法也可以避免插入重復數據,可參考此篇文章:
https://www.cnblogs.com/wang-jx/p/12144289.html
參考博客:https://blog.csdn.net/fly910905/article/details/79634483