用一條mysql語句插入多條數(shù)據(jù)
假如有一個(gè)數(shù)據(jù)表A:
id name title addtime
如果需要插入n條數(shù)據(jù) :
$time= time(); $data = array( array( 'name'=>'name1','title'=>'title1','addtime'=>$time; ), array( 'name'=>'name2','title'=>'title2','addtime'=>$time; ), array( 'name'=>'name3','title'=>'title3','addtime'=>$time; ), ... array( 'name'=>'nameN','title'=>'titleN','addtime'=>$time; ), );
之前我的想法會(huì)是,通過數(shù)據(jù)構(gòu)造多條插入語句,循環(huán)調(diào)用 。如:
$sql1 = "INSERT INTO `A`(`name`,`title`,`addtime`)VALUES ('name1','title1','".$time."')";
$sql2 = "INSERT INTO `A`(`name`,`title`,`addtime`)VALUES ('name2','title2','".$time."')";
......
$sqlN = "INSERT INTO `A`(`name`,`title`,`addtime`)VALUES ('nameN','titleN','".$time."')";
之后發(fā)現(xiàn)了sql的insert語句可以一次插入多條:
$sql = "INSERT INTO `A`(`name`,`title`,`addtime`)VALUES ('name1','title1','".$time."'),";
$sql .= "('name2','title2','".$time."'),";
$sql .= "('name3','title3','".$time."'),";
.....
$sql .= "('nameN','titleN','".$time."')";
通過","號(hào)將多個(gè)數(shù)據(jù)分隔開來,就可以能過一條sql操作來解決多個(gè)數(shù)據(jù)的插入,之前試驗(yàn)時(shí),在插入數(shù)據(jù)條數(shù)為30的情況下,一次插入與多次插入同樣數(shù)據(jù)的速度相比,一次插入快了近9倍。同時(shí),因?yàn)椴迦氩僮髦挥幸淮危砸差愃剖聞?wù)操作,插入失敗則全失敗,插入成功則全成功,使數(shù)據(jù)的管理更加方便。所以,如果有多條數(shù)據(jù)需要插入同一個(gè)表的,盡量用這種方式。
以前插入多條數(shù)據(jù)庫記錄時(shí),常這么寫:
$b = 14;
for($a=0;$a<100;$a++){
$sql = " INSERT INTO `roles` (`uid`,`rid`) VALUES (".$a.",".$b.")";
mysql_query($sql);
}
但這種寫法效率低下,需要多次執(zhí)行sql語句。如果你用過phpmyadmin導(dǎo)入數(shù)據(jù),其實(shí)你會(huì)發(fā)現(xiàn),上面的語句其實(shí)可以這么寫
INSERT INTO `roles` (`uid`,`rid`) VALUES
(534,14),(535,14),(536,14),(537,14),(539,14)
所以原來的代碼可以這么改寫
$b = 14;
for($a=0;$a<100;$a++){
if($a==0)
$sql = "INSERT INTO `roles` (`uid`,`rid`) VALUES (".$a.",".$b.")";
else
$sql. = ",(".$a.",".$b.")";
}
mysql_query($sql);
相關(guān)文章
MySQL BinLog如何恢復(fù)誤更新刪除數(shù)據(jù)
這篇文章主要介紹了MySQL BinLog如何恢復(fù)誤更新刪除數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
cmd中MySQL中文數(shù)據(jù)亂碼問題解決方法
MySQL是默認(rèn)utf8編碼的,所建數(shù)據(jù)庫也是設(shè)置utf8編碼,使用程序可以新增中文數(shù)據(jù),在cmd中使用SQL語句新增數(shù)據(jù)則報(bào)錯(cuò),有類似情況的朋友可以參考下本文2014-02-02
MySQL定時(shí)備份方案(利用Linux crontab)
這篇文章主要給大家介紹了關(guān)于MySQL定時(shí)備份方案的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
idea連接mysql數(shù)據(jù)庫失敗的幾種解決方案
我們?cè)趯W(xué)習(xí)Mybatis時(shí)需要連接Mysql數(shù)據(jù)庫,使用IDEA無法連接mysql數(shù)據(jù)庫,下面這篇文章主要給大家介紹了關(guān)于idea連接mysql數(shù)據(jù)庫失敗的幾種解決方案,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
從ibd文件恢復(fù)MySQL數(shù)據(jù)的操作步驟及常見錯(cuò)誤
MySQL數(shù)據(jù)恢復(fù)是數(shù)據(jù)庫管理中的一項(xiàng)重要任務(wù),尤其是在遭遇意外數(shù)據(jù)丟失、硬件故障或軟件錯(cuò)誤時(shí),下面這篇文章主要給大家介紹了關(guān)于從ibd文件恢復(fù)MySQL數(shù)據(jù)的操作步驟及常見錯(cuò)誤,需要的朋友可以參考下2024-08-08

