用一條mysql語句插入多條資料

else發表於2021-09-09

       假如有一個資料表A:

id name title addtime

        如果需要插入n條資料 :

?

1234567891011121314151617 $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;  ),   );

   之前我的想法會是,透過資料構造多條插入語句,迴圈呼叫 。如:     

?

1234 $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."')";

   之後發現了sql的insert語句可以一次插入多條:

?

12345 $sql = "INSERT INTO `A`(`name`,`title`,`addtime`)VALUES ('name1','title1','".$time."'),";$sql .= "('name2','title2','".$time."'),";$sql .= "('name3','title3','".$time."'),";.....$sql .= "('nameN','titleN','".$time."')";

       透過","號將多個資料分隔開來,就可以能過一條sql操作來解決多個資料的插入,之前試驗時,在插入資料條數為30的情況下,一次插入與多次插入同樣資料的速度相比,一次插入快了近9倍。同時,因為插入操作只有一次,所以也類似事務操作,插入失敗則全失敗,插入成功則全成功,使資料的管理更加方便。所以,如果有多條資料需要插入同一個表的,儘量用這種方式。

以前插入多條資料庫記錄時,常這麼寫:

?

123456789 $b = 14; for($a=0;$a$a++){    $sql = " INSERT INTO `roles` (`uid`,`rid`) VALUES (".$a.",".$b.")";    mysql_query($sql); }

但這種寫法效率低下,需要多次執行sql語句。如果你用過phpmyadmin匯入資料,其實你會發現,上面的語句其實可以這麼寫

?

12 INSERT INTO `roles` (`uid`,`rid`) VALUES    (534,14),(535,14),(536,14),(537,14),(539,14)

所以原來的程式碼可以這麼改寫

?

123456789101112131415 $b = 14; for($a=0;$a$a++){   if($a==0)      $sql = "INSERT INTO `roles` (`uid`,`rid`) VALUES (".$a.",".$b.")";   else     $sql. = ",(".$a.",".$b.")"; } mysql_query($sql);

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2318/viewspace-2810817/,如需轉載,請註明出處,否則將追究法律責任。

相關文章