新增並更新欄位的SQL語法
2011-05-03 · tad · 程式開發筆記 · 點閱數:24935
這幾天在寫一個監控的小程式,因為我設計的某個教育系統中有提供嵌入語法,我想知道到底有哪些學校有嵌入我提供的語法,若有些比較不受歡迎的,可以再做調整或修改,順遍也可以觀察一下學校到底用的怎麼樣。
所需的資料庫結構很簡單,只有兩個欄位就可以搞定,分別是「host」用來紀錄來源網站、「counter」紀錄被連線次數,並將 host 設為主鍵。
一開始是用 REPLACE 語法來做,如此,若裡頭沒該 host 資料,那們就會自動新增,若是已經有資料,重複的 host 也會被集中到同一筆資料,這樣才不會佔據太多資料量。
看起來很OK,但實際上,會遇到一個問題,那就是是 counter 無法累積計數。
要解決這種狀況,一般而言,都會先讀取資料庫,看看有無該資料,若無,用 insert 新增;反之,若已有資料,則改用 update 來更新其 counter。
問題是,這樣要做兩次的資料庫存取,沒有一次就可以搞定的方法嗎?有的,這樣寫就行了!
$sql = "INSERT INTO 資料表 (`host` , `counter`) values('$host', 1 ) ON DUPLICATE KEY UPDATE counter = counter + 1 ";
重點就在用顏色標示出來的部份,如此一來,不存在的資料會新增,已存在的資料會更新計數器,而且一行就搞定囉!