今天查看數據入庫腳本時,看到使用的插入語句是:
INSERT INTO tablename(field1,field2, field3, ...) VALUES(value1, value2, value3, ...) ON DUPLICATE KEY UPDATE field1=value1,field2=value2, field3=value3, ...;
自己第一次遇到,正好查詢文檔學習下。
使用這條語句的原因,是為了更好的執行插入和更新,因為我們再插入一條語句時,表中可能已經存在了這條語句,我們想實現更新的功能,或者表中沒有這條語句,我們想實現插入的功能,而這條語句直接可以同時解決插入和更新的功能。
那么這條語句是如何解釋呢,我們很容易理解前面的部分,就是一個簡單的插入語句,讓我們看下后面的部分ON DUPLICATE KEY UPDATE field1=value1,field2=value2...我們看到后面是一個更新的操作,后面指定了更新的字段,也就是說判斷出表中沒有這條數據,執行的前半部分,插入指定字段得值,在判斷出表中有數據,則執行的的更新操作,更新后半部分指定的字段的值。
那么下一個問題出來了,我們是如何判斷出這條數據是存在的,又需要更新哪些字段呢。
規則如下:
如果你插入的記錄導致UNIQUE索引重復,那么就會認為該條記錄存在,則執行update語句而不是insert語句,反之,則執行insert語句而不是更新語句。
比如我創建表的時候設置的唯一索引為字段a,b,c,那么當a,b,c三個字段完全重復時候,此時就要執行更新語句。當然滿足一部分唯一索引是不會觸發更新操作的,此時會執行插入操作。
而至於要更新哪些字段,要看我們自己的需求了。
說到這里我覺得,需要自己學習和總結一篇MYSQL索引的知識點了,期待ing...