【MySQL】load data語句詳解(三)
作者 羅小波
2、批次匯出和批次匯入
- 使用mysqldump批次匯出生成表的txt檔案,並使用mysqlimport批次匯入表的txt檔案到資料庫中
2.1. 使用mysqldump批次匯出
- 使用mysqldump匯出資料為文字的語法如下:
- mysqldump -u username -p'xxx' -T target_dir db_name tb_name [option];
-
其中option引數是以下幾種可選引數:
–fields-terminated-by 'string' 欄位分隔符
–fields-enclosed-by 'char' 欄位引用符
–fields-optionally-enclosed-by 'char' 欄位引用符,只在char,varchar,text等欄位型別上生效
–fields-escaped-by 'char' 跳脫字元
–lines-terminated-by 'string' 記錄結束符,即換行符 -
示例
- $ mkdir /data/backup/
- $ chown mysql.mysql /data/backup -R
- $ mysqldump -uadmin -pletsg0 -h 10.10.30.241 --single-transaction --master-data=2 --triggers --routines --events xiaoboluo -T /data/backup/
- mysqldump: [Warning] Using a password on the command line interface can be insecure.
- Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database.\
- If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events.
- SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
- SET @@SESSION.SQL_LOG_BIN= 0;
- --
- -- GTID state at the beginning of the backup
- --
- SET @@GLOBAL.GTID_PURGED='2016f827-2d98-11e7-bb1e-00163e407cfb:1-114';
- --
- -- Position to start replication or point-in-time recovery from
- --
- -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=21737; #使用-T選項時,--master-data=2列印的binlog pos資訊會直接列印在標準輸出上
- --
- -- Dumping events for database 'xiaoboluo'
- --
- --
- -- Dumping routines for database 'xiaoboluo
2.2. 使用mysqimport批次匯出
2.2.1. mysqlimport語法及其引數說明-
mysqlimport實用程式載入資料檔案時,它透過向伺服器傳送LOAD DATA INFILE語句來實現(它實際是客戶端提供了load data infile語句的一個命令列介面),可以使用–local選項使mysqlimport從客戶端主機(而不是mysql server主機)讀取資料檔案。如果客戶端和伺服器支援壓縮協議,則可以指定–compress選項以在慢速網路中獲得更好的效能。
-
使用mysqlimport命令,語法如下:
- mysqlimport -uroot -p 'xxx' [--local] db_name order_tab.txt [iption]
- 其中,option引數可以是如下選項
2.2.2. mysqlimport用法演示示例
- --fields-terminated-by=name 指定欄位分隔符
- --fields-enclosed-by=name 指定欄位引用符
- --fields-optionally-enclosed-by=name 指定欄位引用符,但只在char、varchar、text欄位上使用引用符
- --fields-escaped-by=name 指定跳脫字元
- --lines-terminated-by=name 指定行記錄結束符(換行符)
- --ignore-liens=number 忽略前幾行
- --low-priority 碰到有其他執行緒update操作操作的表與匯入操作表相同時,延遲執行匯入操作
- -i, --ignore 如果碰到唯一鍵衝突就忽略衝突行匯入
- -r, --replace 如果碰到唯一鍵衝突就覆蓋衝突行匯入
- -L, --local 從客戶端主機載入資料文字檔案
- -C, --compress 在C/S模型之間使用壓縮傳輸資料
- -c, --columns=name 指定需要匯入哪些列,與load data語句中一樣需要指定表定義中真實的列名,有多個列名時使用逗號分隔
- --default-character-set=name 設定使用該選項指定的字符集來解析文字檔案中的內容
- -h, --host 指定匯入server的主機IP
- -p, --password[=name] 指定匯入server的使用者密碼
- -P, --port=# 指定匯入server的監聽埠
- --use-threads=# 指定多少個執行緒併發執行load data語句(實測單表時指定多執行緒時要比單執行緒要快,由於資料量小,測試出來的差別並不大,官方並沒有說明是基於什麼級別的併發,\
- 只寫了一句:Load files in parallel using N threads,推測可能是基於類似mydumper的併發,但是多表匯入時指定多執行緒就明顯比單執行緒要快很多)
- -u, --user=name 指定匯入server的使用者名稱
- -d, --delete 指定匯入操作之前先把表清空(實測重複匯入時加了這個選項之後可以正常執行,,透過解析binlog發現,發現binlog中記錄的第二次和第一次匯入的語句完全相同是,\
- 第二次匯入時如果發現表中有衝突資料,就先執行的不帶where條件的delete,所有表先delete掉,然後再執行load data語句匯入資料,另外,當與replace一起使用時,忽略replace選項)
- 先執行清理server中表的資料
2.2.2.1. 單表匯入
- admin@localhost : (none) 11:08:58> use xiaoboluo
- Database changed
- admin@localhost : xiaoboluo 11:09:00> show tables;
- +---------------------+
- | Tables_in_xiaoboluo |
- +---------------------+
- | test |
- | test2 |
- | test3 |
- | test4 |
- +---------------------+
- 4 rows in set (0.00 sec)
- admin@localhost : xiaoboluo 11:09:01> select * from test;
- +----+------+-------+
- | id | test | test2 |
- +----+------+-------+
- | 2 | 1 | 2 |
- | 4 | 2 | NULL |
- | 6 | null | NULL |
- | 8 | 4 | NULL |
- | 10 | | NULL |
- | 12 | \\t | NULL |
- | 14 | t | NULL |
- | 16 | \t | NULL |
- | 18 | t | NULL |
- | 20 | NULL | NULL |
- | 22 | "t | NULL |
- +----+------+-------+
- 11 rows in set (0.00 sec)
- admin@localhost : xiaoboluo 11:09:11> system cat /data/backup/test.txt;
- 2 1 2
- 4 2 \N
- 6 null \N
- 8 4 \N
- 10 \ \N
- 12 \\\\t \N
- 14 t \N
- 16 \\t \N
- 18 t \N
- 20 \N \N
- 22 "t \N
- admin@localhost : xiaoboluo 11:12:08> select * from test2;
- +----+------+-------+---------------------+
- | id | test | test2 | dt |
- +----+------+-------+---------------------+
- | 2 | 1 | 2 | 2017-05-02 18:47:03 |
- | 4 | 2 | NULL | 2017-05-02 18:47:03 |
- | 6 | null | NULL | 2017-05-02 18:47:03 |
- | 8 | 4 | NULL | 2017-05-02 18:47:03 |
- | 10 | | NULL | 2017-05-02 18:47:03 |
- | 12 | \\t | NULL | 2017-05-02 18:47:03 |
- | 14 | t | NULL | 2017-05-02 18:47:03 |
- | 16 | \t | NULL | 2017-05-02 18:47:03 |
- | 18 | t | NULL | 2017-05-02 18:47:03 |
- | 20 | NULL | NULL | 2017-05-02 18:47:03 |
- +----+------+-------+---------------------+
- 10 rows in set (0.00 sec)
- admin@localhost : xiaoboluo 11:12:15> system cat /data/backup/test2.txt;
- 2 1 2 2017-05-02 18:47:03
- 4 2 \N 2017-05-02 18:47:03
- 6 null \N 2017-05-02 18:47:03
- 8 4 \N 2017-05-02 18:47:03
- 10 \ \N 2017-05-02 18:47:03
- 12 \\\\t \N 2017-05-02 18:47:03
- 14 t \N 2017-05-02 18:47:03
- 16 \\t \N 2017-05-02 18:47:03
- 18 t \N 2017-05-02 18:47:03
- 20 \N \N 2017-05-02 18:47:03
- admin@localhost : xiaoboluo 11:12:27> truncate test2;
- Query OK, 0 rows affected (0.00 sec)
- admin@localhost : xiaoboluo 11:12:32> select * from test3;
- +----+------------------------------------------+--------+-------+
- | id | test | test2 | test3 |
- +----+------------------------------------------+--------+-------+
- | 2 | a string | 100.20 | null |
- | 4 | a string containing a , comma | 102.20 | NULL |
- | 6 | a string containing a " quote | 102.20 | NULL |
- | 8 | a string containing a ", quote and comma | 102.20 | NULL |
- | 10 | \t | 102.20 | NULL |
- | 14 | \t | 102.20 | NULL |
- +----+------------------------------------------+--------+-------+
- 6 rows in set (0.00 sec)
- admin@localhost : xiaoboluo 11:12:44> system cat /data/backup/test3.txt;
- 2 a string 100.20 null
- 4 a string containing a , comma 102.20 \N
- 6 a string containing a " quote 102.20 \N
- 8 a string containing a ", quote and comma 102.20 \N
- 10 \\t 102.20 \N
- 14 \\t 102.20 \N
- admin@localhost : xiaoboluo 11:12:59> truncate test3;
- Query OK, 0 rows affected (0.01 sec)
- admin@localhost : xiaoboluo 11:13:03> select * from test4;
- +----+------------------------------------------+--------+-------+---------------------+
- | id | test | test2 | test3 | test4 |
- +----+------------------------------------------+--------+-------+---------------------+
- | 2 | a string | 100.20 | null | 2017-05-03 18:41:02 |
- | 4 | a string containing a , comma | 102.20 | NULL | 2017-05-03 18:41:02 |
- | 6 | a string containing a " quote | 102.20 | NULL | 2017-05-03 18:41:02 |
- | 8 | a string containing a ", quote and comma | 102.20 | NULL | 2017-05-03 18:41:02 |
- | 10 | \t | 102.20 | NULL | 2017-05-03 18:41:02 |
- | 14 | \t | 102.20 | NULL | 2017-05-03 18:41:02 |
- +----+------------------------------------------+--------+-------+---------------------+
- 6 rows in set (0.00 sec)
- admin@localhost : xiaoboluo 11:13:15> system cat /data/backup/test4.txt;
- 2 a string 100.20 null 2017-05-03 18:41:02
- 4 a string containing a , comma 102.20 \N 2017-05-03 18:41:02
- 6 a string containing a " quote 102.20 \N 2017-05-03 18:41:02
- 8 a string containing a ", quote and comma 102.20 \N 2017-05-03 18:41:02
- 10 \\t 102.20 \N 2017-05-03 18:41:02
- 14 \\t 102.20 \N 2017-05-03 18:41:02
- admin@localhost : xiaoboluo 11:13:24> truncate test4;
- Query OK, 0 rows affected (0.01 sec)
- admin@localhost : xiaoboluo 11:13:28> flush logs;
- Query OK, 0 rows affected (0.01 sec)
- 使用mysqlimport命令匯入單張表
- [root@5f1772e3-0c7a-4537-97f9-9b57cf6a04c2 ~]# mysqlimport -uadmin -pletsg0 -h10.10.30.241 xiaoboluo /data/backup/test.txt
- mysqlimport: [Warning] Using a password on the command line interface can be insecure.
- xiaoboluo.test: Records: 11 Deleted: 0 Skipped: 0 Warnings: 0
- # 檢視資料庫中的資料
- admin@localhost : xiaoboluo 11:13:42> select * from test;
- +----+------+-------+
- | id | test | test2 |
- +----+------+-------+
- | 2 | 1 | 2 |
- | 4 | 2 | NULL |
- | 6 | null | NULL |
- | 8 | 4 | NULL |
- | 10 | | NULL |
- | 12 | \\t | NULL |
- | 14 | t | NULL |
- | 16 | \t | NULL |
- | 18 | t | NULL |
- | 20 | NULL | NULL |
- | 22 |
- 解析binlog檢視裡邊如何記錄的
2.2.2.2.多表匯入
- $ mysqlbinlog -vv --base64-output=decode-rows mysql-bin.000006
- .....
- BEGIN
- /*!*/;
- # at 344
- #170503 23:15:29 server id 3306241 end_log_pos 443 CRC32 0x4c1c8e8a Rows_query
- # LOAD DATA INFILE '/data/backup/test.txt' INTO TABLE `test` IGNORE 0 LINES #mysqlimport內部呼叫的load data語句在這裡
- # at 443
- #170503 23:15:29 server id 3306241 end_log_pos 501 CRC32 0x1ddc6d53 Table_map: `xiaoboluo`.`test` mapped to number 304
- # at 501
- #170503 23:15:29 server id 3306241 end_log_pos 631 CRC32 0xa8c4beab Write_rows: table id 304 flags: STMT_END_F
- ### INSERT INTO `xiaoboluo`.`test` #由於binlog_format=row,所以寫到binlog中時內部把load data語句轉換為了row格式
- ### SET
- ### @1=2 /* INT meta=0 nullable=0 is_null=0 */
- ### @2='1' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
- ### @3='2' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
- ### INSERT INTO `xiaoboluo`.`test`
- ### SET
- ### @1=4 /* INT meta=0 nullable=0 is_null=0 */
- ### @2='2' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
- ### @3=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
- ### INSERT INTO `xiaoboluo`.`test`
- ### SET
- ### @1=6 /* INT meta=0 nullable=0 is_null=0 */
- ### @2='null' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
- ### @3=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
- ### INSERT INTO `xiaoboluo`.`test`
- ### SET
- ### @1=8 /* INT meta=0 nullable=0 is_null=0 */
- ### @2='4' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
- ### @3=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
- ### INSERT INTO `xiaoboluo`.`test`
- ### SET
- ### @1=10 /* INT meta=0 nullable=0 is_null=0 */
- ### @2='\x09' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
- ### @3=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
- ### INSERT INTO `xiaoboluo`.`test`
- ### SET
- ### @1=12 /* INT meta=0 nullable=0 is_null=0 */
- ### @2='\x5c\x5ct' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
- ### @3=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
- ### INSERT INTO `xiaoboluo`.`test`
- ### SET
- ### @1=14 /* INT meta=0 nullable=0 is_null=0 */
- ### @2='t' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
- ### @3=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
- ### INSERT INTO `xiaoboluo`.`test`
- ### SET
- ### @1=16 /* INT meta=0 nullable=0 is_null=0 */
- ### @2='\x5ct' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
- ### @3=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
- ### INSERT INTO `xiaoboluo`.`test`
- ### SET
- ### @1=18 /* INT meta=0 nullable=0 is_null=0 */
- ### @2='t' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
- ### @3=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
- ### INSERT INTO `xiaoboluo`.`test`
- ### SET
- ### @1=20 /* INT meta=0 nullable=0 is_null=0 */
- ### @2=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
- ### @3=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
- ### INSERT INTO `xiaoboluo`.`test`
- ### SET
- ### @1=22 /* INT meta=0 nullable=0 is_null=0 */
- ### @2='"t' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
- ### @3=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
- # at 631
- #170503 23:15:29 server id 3306241 end_log_pos 662 CRC32 0x0cd1a6ae Xid = 756
- COMMIT/*!*/;
- ......
- 清理掉test表,並重新整理一下binlog
- admin@localhost : xiaoboluo 11:32:19> truncate test;
- Query OK, 0 rows affected (0.01 sec)
- admin@localhost : xiaoboluo 11:35:09> flush logs;
- Query OK, 0 rows affected (0.01 sec)
- 使用mysqlimport匯入多表
- [root@5f1772e3-0c7a-4537-97f9-9b57cf6a04c2 binlog]# time mysqlimport -uadmin -pletsg0 -h10.10.30.241 --replace xiaoboluo /data/backup/*.txt
- mysqlimport: [Warning] Using a password on the command line interface can be insecure.
- xiaoboluo.test2: Records: 10 Deleted: 0 Skipped: 0 Warnings: 0
- xiaoboluo.test3: Records: 6 Deleted: 0 Skipped: 0 Warnings: 0
- xiaoboluo.test4: Records: 6 Deleted: 0 Skipped: 0 Warnings: 0
- xiaoboluo.test: Records: 11 Deleted: 0 Skipped: 0 Warnings: 0
- real 0m0.014s
- user 0m0.002s
- sys 0m0.002s
- # 多表匯入時可以使用引數--use-threads指定多個執行緒,明顯比單執行緒匯入速度要快
- [root@5f1772e3-0c7a-4537-97f9-9b57cf6a04c2 binlog]# time mysqlimport -uadmin -pletsg0 -h10.10.30.241 --replace --use-threads=8 xiaoboluo /data/backup/*.txt
- mysqlimport: [Warning] Using a password on the command line interface can be insecure.
- xiaoboluo.test3: Records: 6 Deleted: 0 Skipped: 0 Warnings: 0
- xiaoboluo.test2: Records: 10 Deleted: 0 Skipped: 0 Warnings: 0
- xiaoboluo.test: Records: 11 Deleted: 0 Skipped: 0 Warnings: 0
- xiaoboluo.test4: Records: 6 Deleted: 0 Skipped: 0 Warnings: 0
- real 0m0.007s
- user 0m0.006s
- sys 0m0.002s
- 校驗資料
- admin@localhost : xiaoboluo 11:35:15> select * from test;
- +----+------+-------+
- | id | test | test2 |
- +----+------+-------+
- | 2 | 1 | 2 |
- | 4 | 2 | NULL |
- | 6 | null | NULL |
- | 8 | 4 | NULL |
- | 10 | | NULL |
- | 12 | \\t | NULL |
- | 14 | t | NULL |
- | 16 | \t | NULL |
- | 18 | t | NULL |
- | 20 | NULL | NULL |
- | 22 | "t | NULL |
- +----+------+-------+
- 11 rows in set (0.00 sec)
- admin@localhost : xiaoboluo 11:40:31> select * from test2;
- +----+------+-------+---------------------+
- | id | test | test2 | dt |
- +----+------+-------+---------------------+
- | 2 | 1 | 2 | 2017-05-02 18:47:03 |
- | 4 | 2 | NULL | 2017-05-02 18:47:03 |
- | 6 | null | NULL | 2017-05-02 18:47:03 |
- | 8 | 4 | NULL | 2017-05-02 18:47:03 |
- | 10 | | NULL | 2017-05-02 18:47:03 |
- | 12 | \\t | NULL | 2017-05-02 18:47:03 |
- | 14 | t | NULL | 2017-05-02 18:47:03 |
- | 16 | \t | NULL | 2017-05-02 18:47:03 |
- | 18 | t | NULL | 2017-05-02 18:47:03 |
- | 20 | NULL | NULL | 2017-05-02 18:47:03 |
- +----+------+-------+---------------------+
- 10 rows in set (0.00 sec)
- admin@localhost : xiaoboluo 11:40:33> select * from test3;
- +----+------------------------------------------+--------+-------+
- | id | test | test2 | test3 |
- +----+------------------------------------------+--------+-------+
- | 2 | a string | 100.20 | null |
- | 4 | a string containing a , comma | 102.20 | NULL |
- | 6 | a string containing a " quote | 102.20 | NULL |
- | 8 | a string containing a ", quote and comma | 102.20 | NULL |
- | 10 | \t | 102.20 | NULL |
- | 14 | \t | 102.20 | NULL |
- +----+------------------------------------------+--------+-------+
- 6 rows in set (0.00 sec)
- admin@localhost : xiaoboluo 11:40:34> select * from test4;
- +----+------------------------------------------+--------+-------+---------------------+
- | id | test | test2 | test3 | test4 |
- +----+------------------------------------------+--------+-------+---------------------+
- | 2 | a string | 100.20 | null | 2017-05-03 18:41:02 |
- | 4 | a string containing a , comma | 102.20 | NULL | 2017-05-03 18:41:02 |
- | 6 | a string containing a " quote | 102.20 | NULL | 2017-05-03 18:41:02 |
- | 8 | a string containing a
- 解析binlog檢視(由於內容較多,這裡就不貼出來了,binlog解析的多表匯入操作在binlog中記錄的就是一個表一個load data語句)
3、總結
-
關於使用local子句與不使用local子句的時候的差異
-
如果load data語句使用了local子句,則客戶端使用TCP遠端連線mysql server時,沒有file許可權仍然能夠匯入文字檔案,這個時候是非常危險的,因為local子句的內部原理是從客戶端的主機讀取文字檔案並傳送到server端的/tmp目錄並儲存為一個臨時檔案,再執行load data語句的。另外,要使用local子句,還需要看server端啟動是否關閉了local_infile選項(如果不指定該選項,則服務端預設為ON),mysql client連線時是否關閉了local_infile選項(如果不指定該選項,則客戶端預設為ON),local_infile在server或client端任意一端關閉都不能使用local子句,會報錯誤:ERROR 1148 (42000): The used command is not allowed with this MySQL version
-
如果load data語句不使用local子句,則這個時候使用者必須要有file許可權才能夠執行匯入文字檔案(並且只能夠匯入server端的本地文字檔案),如果沒有file許可權,可能報沒有file許可權的錯誤,也可能報錯:ERROR 1045 (28000): Access denied for user 'test'@'%' (using password: YES)
- 如果不想這麼麻煩(因為要限制客戶端使用local子句在沒有file許可權的時候使用load data語句,需要在server端使用local_infile=OFF來關閉,不使用local子句時,如果使用者沒有file許可權,那很顯然不能夠使用load data語句,但是如果還想限制由具有file許可權的使用者怎麼辦?),可以使用引數secure_file_priv=null,設定為null時,全面禁止使用load data語句(不管使用local子句還是不使用都不允許執行load data語句)
-
- 強調一點:在mysql的主備複製架構中,load data語句被認為是不安全的,要使得load data語句安全地進行復制,在binlog_format=mixed格式下會轉為row格式記錄,在binlog_format=statement時執行load data語句不會發出警告,而是內部透過一些列的流程來處理。具體是如何處理的呢,請看下回分解《load data語句如何保證主備複製資料一致性》
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28218939/viewspace-2139746/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【MySQL】load data語句詳解(一)MySql
- 【MySQL】load data語句詳解(二)MySql
- MySQL 5.5使用LOAD DATA INFILE語句匯入資料MySql
- MySQL 三種新增語句MySql
- MySQL Order by 語句用法與最佳化詳解MySql
- MySQL條件判斷IF,CASE,IFNULL語句詳解MySqlNull
- 測試mysql--load dataMySql
- MySQL load data載入資料MySql
- MySQL INTO OUTFILE和LOAD DATA INFILE用法MySql
- MySQL - DDL詳解(Data Definition Language)MySql
- MySQL探祕(二):SQL語句執行過程詳解MySql
- Go select語句詳解Go
- 使用load data匯入資料到mysqlMySql
- MySQL-DML(Data Manipulation Language)詳解MySql
- sql的聯結語句詳解SQL
- SQLite SQL語句結構詳解SQLite
- mysql語句MySql
- JavaScript 流程控制語句詳解:if語句、switch語句、while迴圈、for迴圈等JavaScriptWhile
- MySQL的文字匯入之load data localMySql
- load data語句如何保證主備複製資料一致性(一)
- Python流程控制語句詳解Python
- Python if else條件語句詳解Python
- SQL語句執行過程詳解SQL
- Mysq-造數工具mysql_random_data_loadMySqlrandom
- MySQL replace語句MySql
- MySQL的語句MySql
- mySql常用語句MySql
- MySQL語句大全MySql
- MYSQL語句集MySql
- MySQL DML語句MySql
- MySQL Dll語句MySql
- 轉 ------ sql load 詳解SQL
- SQL語句——DATA GUARD概念和管理SQL
- MYSQL學習(三) --索引詳解MySql索引
- MySQL資料匯入匯出之Load data fileMySql
- Windows MySQL load data 命令中的infile 檔案目錄WindowsMySql
- 【轉貼】mysql匯入資料load data infile用法MySql
- SQL中CASE語句強大功能詳解SQL