最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql大批量插入數(shù)據(jù)的4種方法示例

 更新時(shí)間:2019年06月13日 11:20:28   作者:躺達(dá)  
這篇文章主要給大家介紹了關(guān)于mysql大批量插入數(shù)據(jù)的4種方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

本文主要給大家介紹了關(guān)于mysql大批量插入數(shù)據(jù)的4種方法,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧

方法一:循環(huán)插入

這個(gè)也是最普通的方式,如果數(shù)據(jù)量不是很大,可以使用,但是每次都要消耗連接數(shù)據(jù)庫的資源。

大致思維如下

(我這里寫偽代碼,具體編寫可以結(jié)合自己的業(yè)務(wù)邏輯或者框架語法編寫)

for($i=1;$i<=100;$i++){
 $sql = 'insert...............';
 //querysql
}
foreach($arr as $key => $value){
$sql = 'insert...............';
 //querysql
}
while($i <= 100){
$sql = 'insert...............';
 //querysql
 $i++
}

因?yàn)樘^普通同時(shí)也沒什么難度同時(shí)也不是我今天主要寫的所以這里我不多說

方法二:減少連接資源,拼接一條sql

偽代碼如下

//這里假設(shè)arr的key和數(shù)據(jù)庫字段同步,其實(shí)大多數(shù)框架中在php操作數(shù)據(jù)庫的時(shí)候都是這么設(shè)計(jì)的
$arr_keys  = array_keys($arr);
$sql    = 'INSERT INTO tablename (' . implode(',' ,$arr_keys) . ') values';
$arr_values  = array_values($arr);
$sql    .= " ('" . implode("','" ,$arr_values) . "'),";
$sql    = substr($sql ,0 ,-1);
//拼接之后大概就是 INSERT INTO tablename ('username','password') values 
('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx')
.......
//querysql

這樣寫正常插入一萬條基本問題不大,除非數(shù)據(jù)很長,應(yīng)付普通的批量插入夠用了,比如:批量生成卡號,批量生成隨機(jī)碼等等。。。

方法三:使用存儲過程

這個(gè)我手里正好再用這個(gè)就把sql付出來,具體業(yè)務(wù)邏輯大家自己組合一下就可以。

delimiter $$$
create procedure zqtest()
begin
declare i int default 0;
set i=0;
start transaction;
while i<80000 do
 //your insert sql 
set i=i+1;
end while;
commit;
end
$$$
delimiter;
call zqtest();

這個(gè)也只是個(gè)測試代碼,具體參數(shù)大家自行定義

我這里是一次插入8萬條,雖然不多但是,每一條數(shù)據(jù)量都很大,有很多varchar4000 和text字段
耗時(shí) 6.524s

方法四:使用MYSQL LOCAL_INFILE

這個(gè)我目前正在使用,所以順便把pdo的代碼也復(fù)上來,以便大家參考

//設(shè)置pdo開啟MYSQL_ATTR_LOCAL_INFILE
/*hs96.cn@gmail.com
public function pdo_local_info ()
{
  global $system_dbserver;
  $dbname = 'hs96.cn@gmail.com';
  $ip  = 'hs96.cn@gmail.com';
  $user = 'hs96.cn@gmail.com';
  $pwd  = 'hs96.cn@gmail.com';
  $dsn  = 'mysql:dbname=' . $dbname . ';host=' . $ip . ';port=3306';
  $options = [PDO::MYSQL_ATTR_LOCAL_INFILE => true];
  $db  = new PDO($dsn ,$user ,$pwd ,$options);
  return $db;
 }
//偽代碼如下
public function test(){
  $arr_keys   = array_keys($arr);
  $root_dir   = $_SERVER["DOCUMENT_ROOT"] . '/';
  $my_file   = $root_dir . "hs96.cn@gmail.com/sql_cache/" . $order['OrderNo'] . '.sql';
  $fhandler   = fopen($my_file,'a+');
  if ($fhandler) {
  $sql = implode("\t" ,$arr);
   $i = 1;
   while ($i <= 80000)
   {
    $i++;
    fwrite($fhandler ,$sql . "\r\n");
   }
   $sql = "LOAD DATA local INFILE '" . $myFile . "' INTO TABLE ";
   $sql .= "tablename (" . implode(',' ,$arr_keys) . ")";
   $pdo = $this->pdo_local_info ();
   $res = $pdo->exec($sql);
   if (!$res) {
    //TODO 插入失敗
   }
   @unlink($my_file);
  }
}

這個(gè)同樣每一條數(shù)據(jù)量都很大,有很多varchar4000 和text字段

耗時(shí) 2.160s

以上滿足基本需求,100萬數(shù)據(jù)問題不大,要不數(shù)據(jù)實(shí)在太大也涉及分庫分表了,或者使用隊(duì)列插入了。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 兩個(gè)windows服務(wù)器使用canal實(shí)現(xiàn)mysql實(shí)時(shí)同步

    兩個(gè)windows服務(wù)器使用canal實(shí)現(xiàn)mysql實(shí)時(shí)同步

    canal是阿里基于java寫的一個(gè)組件,他的作用是canal.deployer讀取mysql數(shù)據(jù)的binlog日志,然后canal.adapter將其轉(zhuǎn)換為對應(yīng)的數(shù)據(jù)(數(shù)據(jù)的變化或者變化后的數(shù)據(jù),跟配置有關(guān)),并且同步到相關(guān)中間件,本文實(shí)現(xiàn)兩個(gè)windows服務(wù)器使用canal實(shí)現(xiàn)mysql主從復(fù)制實(shí)時(shí)同步
    2025-03-03
  • MySQL中連接查詢和子查詢的問題

    MySQL中連接查詢和子查詢的問題

    這篇文章主要介紹了MySQL中連接查詢和子查詢的問題,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • CentOS7中安裝MySQL的圖文講解

    CentOS7中安裝MySQL的圖文講解

    這篇文章主要介紹了CentOS7中安裝MySQL的圖文講解,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 詳解騰訊云CentOS7.0使用yum安裝mysql及使用遇到的問題

    詳解騰訊云CentOS7.0使用yum安裝mysql及使用遇到的問題

    本篇文章主要介紹了騰訊云CentOS7.0使用yum安裝mysql,詳細(xì)的介紹了使用yum安裝mysql及使用遇到的問題,有興趣的可以了解一下。
    2017-01-01
  • SQL實(shí)現(xiàn)數(shù)據(jù)過濾流程詳解

    SQL實(shí)現(xiàn)數(shù)據(jù)過濾流程詳解

    這篇文章主要介紹了SQL實(shí)現(xiàn)數(shù)據(jù)過濾流程,當(dāng)我們在SQL中查詢數(shù)據(jù)時(shí),肯定是有一些數(shù)據(jù)是我們不需要的,所以我們此時(shí)就要對數(shù)據(jù)進(jìn)行過濾,以篩選出我們僅需要的數(shù)據(jù)
    2023-01-01
  • 利用MySQL加密函數(shù)保護(hù)Web網(wǎng)站敏感數(shù)據(jù)的方法分享

    利用MySQL加密函數(shù)保護(hù)Web網(wǎng)站敏感數(shù)據(jù)的方法分享

    如果您正在運(yùn)行使用MySQL的Web應(yīng)用程序,那么它把密碼或者其他敏感信息保存在應(yīng)用程序里的機(jī)會(huì)就很大
    2012-03-03
  • MySQL主從復(fù)制之GTID模式詳細(xì)介紹?

    MySQL主從復(fù)制之GTID模式詳細(xì)介紹?

    這篇文章主要介紹了MySQL主從復(fù)制之GTID模式,GTID的復(fù)制方式,它由UUID和事務(wù)ID兩個(gè)部分組成,具有GTID事務(wù)是全局唯一性的,并且一個(gè)事務(wù)對應(yīng)一個(gè)GTID值、一個(gè)GTID值在同一個(gè)MySQL實(shí)例上只會(huì)執(zhí)行一次等特點(diǎn),想了解更多的小伙伴可以參考下面詳細(xì)內(nèi)容,希望對你有所幫助
    2022-02-02
  • MySQL批量插入唯一索引沖突的幾種避免辦法

    MySQL批量插入唯一索引沖突的幾種避免辦法

    我們在進(jìn)行大批量的數(shù)據(jù)插入時(shí),遇到唯一索引沖突是經(jīng)常的事,本文主要介紹了MySQL批量插入唯一索引沖突的幾種避免辦法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • MySql中取前幾行數(shù)據(jù)使用limit來完成

    MySql中取前幾行數(shù)據(jù)使用limit來完成

    在mysql中是沒有top關(guān)鍵字的,不過可以用limit來完成此功能,下面舉例為大家詳細(xì)介紹下它的使用方法,不會(huì)的朋友可以學(xué)習(xí)下
    2013-07-07
  • 大數(shù)據(jù)小內(nèi)存排序問題如何巧妙解決

    大數(shù)據(jù)小內(nèi)存排序問題如何巧妙解決

    文章介紹了大數(shù)據(jù)小內(nèi)存排序的三種方法:數(shù)據(jù)庫排序、分治法和位圖法,數(shù)據(jù)庫排序簡單但速度慢,對設(shè)備要求高;分治法高效但實(shí)現(xiàn)復(fù)雜;位圖法可讀性差,但存儲空間受限
    2025-01-01

最新評論

东乌| 闽侯县| 芷江| 乌兰察布市| 武夷山市| 和田县| 当雄县| 德令哈市| 临安市| 尚义县| 石柱| 美姑县| 民权县| 鄂伦春自治旗| 平阳县| 昌吉市| 罗江县| 大竹县| 泰宁县| 开鲁县| 易门县| 望城县| 白城市| 宜川县| 云浮市| 黑山县| 武宣县| 永年县| 陆丰市| 鄯善县| 固阳县| 九江县| 囊谦县| 额济纳旗| 得荣县| 定兴县| 淳安县| 玉林市| 麦盖提县| 桐乡市| 吉安县|