本文目錄一覽:
mysql 插入數據如何防止重複
如果表中包含有一個自動遞增欄位AUTO_INCREMENT,並用 INSERT … UPDATE 插入一行,函數 LAST_INSERT_ID()會返回AUTO_INCREMENT的值,如果這個語句更新某一行, LAST_INSERT_ID() 就沒有意義了。但是,你可以通過用 LAST_INSERT_ID(expr)使它變得有意義,假如id欄位是自動遞增欄的話,使 LAST_INSERT_ID() 對更新語句有意義的方法如下:
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;
ON DUPLICATE KEY UPDATE命令語句,那麼在唯一索引或者主索引的作用下將不插入與資料庫教程記錄重複的內容,但同時會更新資料庫中的舊記錄。例如,欄位a被聲明為唯一索引並且裡面只包含有值為1的記錄,以下兩個語句會達到同樣的效果:一、INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;二、UPDATE table SET c=c+1 WHERE a=1;可以在插入更新語句 INSERT … UPDATE 中使用 VALUES(欄位名) 函數去關聯某一行記錄。也就是說, VALUES(欄位名) 可以用在UPDATE語句中去更新某欄位的值而不會出現重複鍵。這個函數在多行插入中尤其有用。但是函數 VALUES() 僅當用在 INSERT … UPDATE 語句中才有意義,否則會返回NULL。例如:INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
其它方法insert into songinfo(songname,songtime,songpath) select ‘aaa’,’bb’ ,’cc’ from dual where not exists(select * from songinfo where songname=’123′)//上述命令在MYSQL3.x版本上不能執行,5.0.24的可以
比如我的Mysql當中某database存在url這張表,現在要有C API 將url,url_hash,domain這三個變數的值插入到資料庫中,url_hash是主鍵,本來為了不至插入重複項,應該判斷一下的,現在只要這一條SQL語句就行了,什麼都不要管,減少了大量的查詢和判斷工作,我只能說一句:太爽了。如下:SQL語句:
insert into TABLE(FIELD0,FIELD1…) select VALUE0,VALUE1 ,… from dual where not exists(select * from TABLE where FIELDN=VALUEN)代碼:
int store_url(char *url)
{
char *key, url_hash[HASHLEN], domain[DOMAINLEN], sqlstr[SQLSTRLEN];……sprintf (sqlstr, “insert into url(url,url_hash,domain) select ‘%s’,’%s’,’%s’ from dual where not exists(select * from url where url_hash=’%s’) “, url, url_hash, domain, url_hash);
if (mysql_query (conn, sqlstr)) //大部分情況下失敗是由於資料庫關閉,所以可以在以下添加上再連接MySQL的代碼,不贅寫!
{ printf (“Error:%sn”, mysql_error (conn));
return;
}
}最後有一種比較簡單的方法就是先查詢當前的數據在資料庫是否有相同的,如果有的話就提示如
*/
$title =”;
$sql = “Select * from tablename where title=’$title'”;
$query = mysql_query( $sql );
if( mysql_num_rows( $query ) )
{
exit(‘不能重複插入相同的記錄’);
}
else
{
$sql =”insert tablename values(‘$title’)”;
mysql_query( $sql );
exit(‘保存記錄成功’);
}
//這種方的不好之處在於多次查詢了資料庫,並且代碼也冗餘了,好了到底你用那排除重複數據的方法你自己根據自己的情況而定吧。
mysql怎麼防止多次上傳同樣數據
資料庫欄位設置唯一 後台增加驗證,驗證傳過來的數據是否和資料庫重複
有沒有簡單的方法防止網頁刷新等導致數據重複提交到資料庫,求詳細代碼,謝謝!!!
防止網頁刷新導致數據重複提交,可以在表單中添加Token令牌機制,這即保證了安全性(防CSRF攻擊),又能夠驗證重複提交,每次生成表單頁面時,會生成一個Token,在每次提交數據時,都要求檢查Token,通過token檢驗合法的請求,可以多去看看實戰教程。
原創文章,作者:JSNO,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/149012.html