一般正常的情況下都會遇到這種需求
判斷數據庫中是否存在某條數據。有一些數據信息,我們每次發生請求的時候,要判斷此條數據是否存在,如果存在則進行修改操作,反則進行插入操作,一般人都會這樣寫
?if($name1==$name2){
?$sql="update table set a1='a1'";
}else{
?$sql="insert into table(a1) values('a1')";
}
現在剛發現mysql有個自帶的函數,可以一句sql就代替上面的代碼 ,php判斷都不用寫了,這個方法就是
ON DUPLICATE KEY UPDATE
用法如下
$sql="insert into cinema(movieName,releaseInfo,sumBoxInfo,boxInfo,boxRate,showInfo,showRate,avgShowView,avgSeatView) values ('$movieName','$releaseInfo','$sumBoxInfo','$boxInfo','$boxRate','$showInfo','$showRate','$avgShowView','$avgSeatView') ON DUPLICATE KEY UPDATE movieName='$movieName',releaseInfo='$releaseInfo',sumBoxInfo='$sumBoxInfo',boxInfo='$boxInfo', boxRate='$showInfo',showInfo='$showInfo',showRate='$showRate',avgShowView='$avgShowView',avgSeatView='$avgSeatView'";
用的時候 注意一下,最好保持有一個主鍵,到時候程序會根據你的這個主鍵 是否相同,去判斷這條數據是否存在,比如說 movieName是主鍵,則sql判斷的時候會去找 movieName在表中是否有相同的,如果有 則進行修改,沒有則進行插入操作。
?
有的人 會問,如果有多個索引 怎么辦呢,這個我還沒測試呢,從網上找了一段解釋,你們看下
若多個索引都沖突,則只有一條記錄被修改。
create table test(
id int not null primary key,
num int not null UNIQUE key,
tid int not null
)
為了測試兩個唯一索引都沖突的情況,然后插入下面的數據
insert into test values(1,1,1), (2,2,2);
然后執行:
insert into test values(1,2,3) on duplicate key update tid = tid + 1;
因為a和b都是唯一索引,插入的數據在兩條記錄上產生了沖突,然而執行后只有第一條記錄被修改
id int not null primary key,
num int not null UNIQUE key,
tid int not null
)
為了測試兩個唯一索引都沖突的情況,然后插入下面的數據
insert into test values(1,1,1), (2,2,2);
然后執行:
insert into test values(1,2,3) on duplicate key update tid = tid + 1;
因為a和b都是唯一索引,插入的數據在兩條記錄上產生了沖突,然而執行后只有第一條記錄被修改