真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MySQL兩種原生數(shù)據(jù)導(dǎo)入方式有何區(qū)別及用法

不知道大家之前對(duì)類似MySQL兩種原生數(shù)據(jù)導(dǎo)入方式有何區(qū)別及用法的文章有無(wú)了解,今天我在這里給大家再簡(jiǎn)單的講講。感興趣的話就一起來(lái)看看正文部分吧,相信看完MySQL兩種原生數(shù)據(jù)導(dǎo)入方式有何區(qū)別及用法你一定會(huì)有所收獲的。

成都創(chuàng)新互聯(lián)公司是一家專業(yè)從事成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)的品牌網(wǎng)絡(luò)公司。如今是成都地區(qū)具影響力的網(wǎng)站設(shè)計(jì)公司,作為專業(yè)的成都網(wǎng)站建設(shè)公司,成都創(chuàng)新互聯(lián)公司依托強(qiáng)大的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營(yíng)經(jīng)驗(yàn),為您提供專業(yè)的成都網(wǎng)站建設(shè)、營(yíng)銷型網(wǎng)站建設(shè)及網(wǎng)站設(shè)計(jì)開(kāi)發(fā)服務(wù)!

MySQL中有2種原生的數(shù)據(jù)導(dǎo)入方式, load和source. 先看下兩種方式的過(guò)程和特點(diǎn).

 

為演示方便, 使用測(cè)試表tb1, 表結(jié)構(gòu)如下:

mysql> SHOW CREATE TABLE tb1\G

*************************** 1. row***************************

       Table:tb1

Create Table: CREATE TABLE `tb1` (

  `id`bigint(20) unsigned NOT NULL AUTO_INCREMENT,

  `username`varchar(20) NOT NULL DEFAULT '',

  `age`tinyint(3) unsigned NOT NULL DEFAULT '0',

  PRIMARY KEY(`id`),

  UNIQUE KEY`uniq_username` (`username`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

1 row in set (0.00 sec)

 

表中有若干測(cè)試數(shù)據(jù):

mysql> SELECT * FROM tb1;

+----+----------+-----+

| id | username | age |

+----+----------+-----+

|  1 |aa      | 22 |

|  2 |bb      | 20 |

|  3 |cc      | 24 |

|  4 |dd      | 20 |

+----+----------+-----+

4 rows in set (0.00 sec)

 

將tb1表中數(shù)據(jù)導(dǎo)出成CSV格式的文件tb1.csv:

mysql> SELECT * FROM tb1 INTO OUTFILE"/tmp/tb1.csv" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY'"' LINES TERMINATED BY '\n';

Query OK, 4 rows affected (0.00 sec)

 

tb1.csv的內(nèi)容是:

1,"aa",22

2,"bb",20

3,"cc",24

4,"dd",20

 

將tb1表TRUNCATE后, load導(dǎo)入:

mysql> TRUNCATE TABLE tb1;

Query OK, 0 rows affected (0.02 sec)

 

mysql --login-path=mytest test --execute="LOADDATA INFILE '/tmp/tb1.csv' INTO TABLE tb1 FIELDS TERMINATED BY ',' OPTIONALLYENCLOSED BY '\"' LINES TERMINATED BY '\n'"

 

為測(cè)試報(bào)錯(cuò), 把tb1.csv文件修改為如下(第1, 4行):

9,"ff",22

2,"bb",20

3,"cc",24

14,"gg",25

 

load導(dǎo)入出錯(cuò)時(shí), 會(huì)終止導(dǎo)入過(guò)程, 提示出錯(cuò)位置和原因, 但這個(gè)位置行并不能直接對(duì)應(yīng)到原文件中(應(yīng)為at line 2):

mysql --login-path=mytest test --execute="LOADDATA INFILE '/tmp/tb1.csv' INTO TABLE tb1 FIELDS TERMINATED BY ',' OPTIONALLYENCLOSED BY '\"' LINES TERMINATED BY '\n'"

ERROR 1062 (23000) at line 1: Duplicate entry '2'for key 'PRIMARY'

 

查看tb1表的數(shù)據(jù), 沒(méi)有變化:

mysql> SELECT * FROM tb1;

+----+----------+-----+

| id | username | age |

+----+----------+-----+

|  1 |aa      | 22 |

|  2 |bb      | 20 |

|  3 |cc      | 24 |

|  4 |dd      | 20 |

+----+----------+-----+

4 rows in set (0.00 sec)

 

這里可看出, load導(dǎo)入數(shù)據(jù)時(shí), 遇到錯(cuò)誤會(huì)立刻終止, 提示錯(cuò)誤的位置和原因, 出錯(cuò)之前的數(shù)據(jù)也不會(huì)導(dǎo)入.

 

導(dǎo)入速度如何控制呢, 暫無(wú)辦法; 另外一點(diǎn), load導(dǎo)入數(shù)據(jù)時(shí), 要指定自增主鍵值, 這在數(shù)據(jù)表中已有數(shù)據(jù)的情況下, 可能會(huì)遇到麻煩.

 

接著看下source的表現(xiàn), 將tb1表中數(shù)據(jù)dump成SQL文件tb1.sql(這里只需要INSERT語(yǔ)句):

mysqldump --login-path=mytest --add-drop-database--skip-add-drop-table --add-drop-trigger --complete-insert--default-character-set=utf8mb4 --events --skip-extended-insert --force--hex-blob --no-create-db --no-create-info --quick --result-file=tb1.sql--routines --single-transaction --triggers test tb1

 

tb1.sql的內(nèi)容是:

INSERT INTO `tb1` (`id`, `username`, `age`) VALUES(1,'aa',22);

INSERT INTO `tb1` (`id`, `username`, `age`) VALUES(2,'bb',20);

INSERT INTO `tb1` (`id`, `username`, `age`) VALUES(3,'cc',24);

INSERT INTO `tb1` (`id`, `username`, `age`) VALUES(4,'dd',20);

 

將tb1表TRUNCATE后, source導(dǎo)入:

mysql> TRUNCATE TABLE tb1;

Query OK, 0 rows affected (0.02 sec)

 

mysql --login-path=mytest test --execute="source/tmp/tb1.sql"

 

為測(cè)試報(bào)錯(cuò), 把tb1.sql文件修改為如下(第1, 4行):

INSERT INTO `tb1` (`id`, `username`, `age`) VALUES(9,'ff',22);

INSERT INTO `tb1` (`id`, `username`, `age`) VALUES(2,'bb',20);

INSERT INTO `tb1` (`id`, `username`, `age`) VALUES(3,'cc',24);

INSERT INTO `tb1` (`id`, `username`, `age`) VALUES(14,'gg',25);

 

source導(dǎo)入出錯(cuò)時(shí), 會(huì)終止導(dǎo)入過(guò)程, 提示出錯(cuò)位置和原因:

mysql --login-path=mytest test --execute="source/tmp/tb1.sql"

ERROR 1062 (23000) at line 2 in file:'/tmp/tb1.sql': Duplicate entry '2' for key 'PRIMARY'

 

查看tb1表的數(shù)據(jù), 發(fā)現(xiàn)報(bào)錯(cuò)前的數(shù)據(jù)導(dǎo)入了:

mysql> SELECT * FROM tb1;

+----+----------+-----+

| id | username | age |

+----+----------+-----+

|  1 |aa      | 22 |

|  2 |bb      | 20 |

|  3 |cc      | 24 |

|  4 |dd      | 20 |

|  9 |ff       | 22 |

+----+----------+-----+

5 rows in set (0.00 sec)

 

這里可看出, source導(dǎo)入數(shù)據(jù)時(shí), 遇到錯(cuò)誤會(huì)立刻終止, 提示錯(cuò)誤的位置和原因, 出錯(cuò)之前的數(shù)據(jù)會(huì)被導(dǎo)入.

 

再看下source是否解決了load存在的另外兩個(gè)問(wèn)題:

如何控制數(shù)據(jù)導(dǎo)入速度, 可在SQL文件中加入SELECT SLEEP(N)暫停導(dǎo)入, 能起到緩解延時(shí)作用.

 

還有個(gè)自增主鍵的問(wèn)題, 可將數(shù)據(jù)文件中的INSERT語(yǔ)句做如下處理, 去除主鍵字段, 或?qū)⑵渲翟O(shè)置為NULL:

INSERT INTO `tb1` (`username`, `age`) VALUES('ff',22);

INSERT INTO `tb1` (`id`, `username`, `age`) VALUES(NULL,'ff',22);

 

經(jīng)過(guò)對(duì)比, 使用source可以更好控制數(shù)據(jù)的導(dǎo)入過(guò)程(另外, 對(duì)于使用MySQL命令行工具重定向?qū)? 如mysql < filename.sql, 該方式其實(shí)和source是一樣的).

 

選用source后, 還是會(huì)遇到延時(shí)等問(wèn)題, 若想再進(jìn)一步控制導(dǎo)入過(guò)程, 只能借助Bash腳本等加入檢測(cè)邏輯了, 如在導(dǎo)入下一個(gè)文件時(shí), 先檢查若存在延時(shí), 則腳本中sleep N暫停導(dǎo)入, 又若出現(xiàn)錯(cuò)誤, 可通過(guò)郵件進(jìn)行通知, 在腳本中可定義各種情況下的處理方式了. 稍后我也會(huì)整理Bash編程的最佳實(shí)踐,感興趣可關(guān)注訂閱號(hào)”數(shù)據(jù)庫(kù)最佳實(shí)踐”(DBBestPractice).

 

寫在最后, 前面測(cè)試load, 使用SELECT ... INTO OUTFILE將數(shù)據(jù)導(dǎo)出為CSV格式, 該方式導(dǎo)出少量數(shù)據(jù), 還是非常方便的, 只是若數(shù)據(jù)中包含中文, 使用Excel打開(kāi)若遇到亂碼, 可嘗試導(dǎo)出時(shí), 指明字符集:

SELECT * FROM tb1 INTO OUTFILE "/tmp/tb1.csv" CHARACTER SET GBK FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';

看完MySQL兩種原生數(shù)據(jù)導(dǎo)入方式有何區(qū)別及用法這篇文章,大家覺(jué)得怎么樣?如果想要了解更多相關(guān),可以繼續(xù)關(guān)注我們的行業(yè)資訊板塊。


網(wǎng)頁(yè)標(biāo)題:MySQL兩種原生數(shù)據(jù)導(dǎo)入方式有何區(qū)別及用法
文章轉(zhuǎn)載:http://weahome.cn/article/pdihsh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部