1. MySQLLOADの基本的な背景
データベースの運用・保守の過程で、必然的にテキストデータを処理してデータベースにインポートする必要があります。この記事では、デモンストレーションのためにインポートおよびエクスポートする際のいくつかの一般的なシナリオを整理します。
ヒント: EditLineラッパーを使用したLinux-glibc2.12(x86_64)用
の
mysql Ver 14.14 Distrib5.7.32のデモ環境MySQLバージョン
2つ目は、MySQLLOADの基本パラメータです。
この記事の後続の例では、次のコマンドを使用して、サンプルデータをcsv形式でエクスポートします(区切り文字としてコンマ、区切り文字として「二重引用符」を使用)
テストデータテーブルの構造は次のとおりです。
Create Table: CREATE TABLE `t_menu` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜单名称',
`parent_id` int(11) DEFAULT '0' COMMENT '父菜单id',
`level` int(11) DEFAULT '1' COMMENT '菜单等级,从1开始',
`url` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜单链接',
`icon` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜单图标',
`order` int(11) DEFAULT NULL COMMENT '同级菜单顺序',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`menu_type` int(3) DEFAULT '2' COMMENT '菜单类型:0:目录,1:页面,2:不区分(兼容老数据)',
PRIMARY KEY (`id`),
UNIQUE KEY `unique_menu_name_level_parent_id` (`name`,`level`,`parent_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=202 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
1 row in set (0.00 sec)
-基本的なパラメータをエクスポートします
load data infile '/data/mysql/tmp/b_menu.txt' replace into table `menu.tmp` character set utf8mb4 fields terminated by ',' enclosed by '"' lines terminated by '\n';
localhost "mgr01" 10:52:02 test01>select * into outfile '/data/mysql/tmp/b_menu.txt' character set utf8mb4 fields terminated by ',' enclosed by '"' lines terminated by '\n' from test01.b_menu limit 10;
Query OK, 10 rows affected (0.00 sec)
[root@test ~]# cat /data/mysql/tmp/b_menu.txt
"1","核心数据指标","30","2","/index",\N,"1","2019-06-19 19:58:10","2019-10-31 20:27:37","1"
"2","拍机数据","29","2","/auction-dashboard",\N,"1","2019-06-19 19:58:24","2019-10-24 20:21:36","1"
"3","产品滞留数据","31","2","/product-dashboard",\N,"1","2019-06-19 19:58:42","2019-10-24 20:21:36","1"
"4","发货数据","42","3","/product-data",\N,"1","2019-08-29 17:44:35","2019-11-18 17:22:29","1"
"6","退租数据","14","2","/tuizushuju","","3","2019-09-25 19:05:47","2019-11-18 17:23:40","1"
"7","呆滞数据","14","2","/daizhishuju","","2","2019-09-25 19:12:29","2019-11-18 17:23:40","1"
"10","发货数据明细","14","2","/shujumingxi","","4","2019-09-25 19:15:37","2019-11-18 17:23:40","1"
"12","增率统计","32","3","/branch-dashboard",\N,"1","2019-09-26 21:23:16","2020-01-15 21:03:38","1"
"13","增率详细","32","3","/customer-dashboard",\N,"2","2019-09-26 21:23:46","2020-01-15 21:03:38","1"
"14","产品部数据","0","1","/svn7kezaqe9","","5","2019-09-29 21:58:09","2020-07-28 21:18:50","0"
テスト一時テーブルmenu.tmpを作成します。
CREATE TABLE `menu.tmp` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜单名称',
`parent_id` int(11) DEFAULT '0' COMMENT '父菜单id',
`level` int(11) DEFAULT '1' COMMENT '菜单等级,从1开始',
`url` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜单链接',
`icon` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜单图标',
`order` int(11) DEFAULT NULL COMMENT '同级菜单顺序',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`menu_type` int(3) DEFAULT '2' COMMENT '菜单类型:0:目录,1:页面,2:不区分(兼容老数据)',
PRIMARY KEY (`id`),
UNIQUE KEY `unique_menu_name_level_parent_id` (`name`,`level`,`parent_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
localhost "mgr01" 10:59:07 test01>load data infile '/data/mysql/tmp/b_menu.txt' replace into table `menu.tmp` character set utf8mb4 fields terminated by ',' enclosed by '"' lines terminated by '\n';
Query OK, 10 rows affected (0.03 sec)
Records: 10 Deleted: 0 Skipped: 0 Warnings: 0
localhost "mgr01" 10:59:17 test01>
localhost "mgr01" 11:00:28 test01>select * from `menu.tmp`;
+----+--------------------+-----------+-------+---------------------+------+-------+---------------------+---------------------+-----------+
| id | name | parent_id | level | url | icon | order | create_time | update_time | menu_type |
+----+--------------------+-----------+-------+---------------------+------+-------+---------------------+---------------------+-----------+
| 1 | 核心数指标 | 30 | 2 | /index | NULL | 1 | 2019-06-19 19:58:10 | 2019-10-31 20:27:37 | 1 |
| 2 | 易机数据 | 29 | 2 | /auction-dashboard | NULL | 1 | 2019-06-19 19:58:24 | 2019-10-24 20:21:36 | 1 |
| 3 | 产品滞留数据 | 31 | 2 | /product-dashboard | NULL | 1 | 2019-06-19 19:58:42 | 2019-10-24 20:21:36 | 1 |
| 4 | 发货数据 | 42 | 3 | /product-data | NULL | 1 | 2019-08-29 17:44:35 | 2019-11-18 17:22:29 | 1 |
| 6 | 退数据 | 14 | 2 | /tuizushuju | | 3 | 2019-09-25 19:05:47 | 2019-11-18 17:23:40 | 1 |
| 7 | 数据 | 14 | 2 | /daizhishuju | | 2 | 2019-09-25 19:12:29 | 2019-11-18 17:23:40 | 1 |
| 10 | 数据明细 | 14 | 2 | /shujumingxi | | 4 | 2019-09-25 19:15:37 | 2019-11-18 17:23:40 | 1 |
| 12 | 租率统计 | 32 | 3 | /branch-dashboard | NULL | 1 | 2019-09-26 21:23:16 | 2020-01-15 21:03:38 | 1 |
| 13 | 租率详细 | 32 | 3 | /customer-dashboard | NULL | 2 | 2019-09-26 21:23:46 | 2020-01-15 21:03:38 | 1 |
| 14 | 产品部数据 | 0 | 1 | /svn7kezaqe9 | | 5 | 2019-09-29 21:58:09 | 2020-07-28 21:18:50 | 0 |
+----+--------------------+-----------+-------+---------------------+------+-------+---------------------+---------------------+-----------+
10 rows in set (0.00 sec)
3、LOADシナリオの例
シナリオ1.LOADファイルにはデータテーブルよりも多くのフィールドがあります
テキストファイルのデータの一部をデータテーブルにインポートするだけで済みます
2つのフィールドを持つテーブル構造を一時的に作成します。
localhost "mgr01" 11:09:48 test01>create table menu_tmp01 as select id,name,level,url from `menu.tmp`;
ERROR 1786 (HY000): Statement violates GTID consistency: CREATE TABLE ... SELECT.
localhost "mgr01" 11:00:38 test01>create table `menu.tmp01` select id,name,level,url from `menu.tmp`;
ERROR 1786 (HY000): Statement violates GTID consistency: CREATE TABLE ... SELECT.
その理由は、MySQLがGtidを有効にしたため、次の結果になります。
一般に、以前のバージョンのmysql5.7は、select * from XXXとしてテーブルXXXを作成することをサポートしています。テーブルを作成するためのこの構文ですが、MySQL5.7.xバージョンのgtidがオンになっていると、エラーが報告されます。
エラー1786(HY000):ステートメント違反GTIDの一貫性:CREATE TABLE ... SELECT。
公式の手順:https://dev.mysql.com/doc/refman/5.7/en/replication-gtids-restrictions.html
MySQLのGtidをオフにする方法は2つあります。1つ
は、MySQL my.cnfの構成ファイルを直接変更し、MySQLサービスを再起動する方法です
。gtid_mode= off Enforce_gtid_consistency
= 0
2番目の方法は、オンラインでスクロールしてパラメーターを変更することです。
オンラインで動的に変更しようとしたときのエラー:
localhost "mgr01" 11:15:36 test01>SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = off;
ERROR 1779 (HY000): GTID_MODE = ON requires ENFORCE_GTID_CONSISTENCY = ON.
localhost "mgr01" 11:16:49 test01> set global GTID_MODE = off;
ERROR 1788 (HY000): The value of @@GLOBAL.GTID_MODE can only be changed one step at a time: OFF <-> OFF_PERMISSIVE <-> ON_PERMISSIVE <-> ON. Also note that this value must be stepped up or down simultaneously on all servers. See the Manual for instructions.
上記のプロンプトは、現在の値がONの場合、OFFに設定する場合は、最初にGTID_MODE = ON_PERMISSIVEを設定し、次にGTID_MODE = OFF_PERMISSIVEを設定し、次にGTID_MODE = offを設定します。OFFをONに設定すると設定できます。逆に。
セットアップを続行します。
localhost "mgr01" 11:25:51 test01>set @@GLOBAL.GTID_MODE=ON_PERMISSIVE;
Query OK, 0 rows affected (0.03 sec)
localhost "mgr01" 11:25:52 test01>set @@GLOBAL.GTID_MODE=OFF_PERMISSIVE;
Query OK, 0 rows affected (0.01 sec)
@@ GLOBAL.GTID_MODE = OFF_PERMISSIVE;を設定するとエラーが報告され、通常は次のエラーが報告されます。
mysql> set @@GLOBAL.GTID_MODE=OFF_PERMISSIVE;
ERROR 1766 (HY000): The system variable gtid_mode cannot be set when there is an ongoing transaction.
上記のエラーが報告されます。進行中のトランザクションがある場合、設定できないため、COMMIT:
localhost "mgr01" 11:26:00 test01>commit;
Query OK, 0 rows affected (0.00 sec)
localhost "mgr01" 11:27:48 test01>set @@GLOBAL.GTID_MODE=OFF_PERMISSIVE;
Query OK, 0 rows affected (0.00 sec)
localhost "mgr01" 11:28:01 test01>set @@GLOBAL.GTID_MODE=OFF;
Query OK, 0 rows affected (0.02 sec)
localhost "mgr01" 11:28:19 test01> show variables like 'GTID_MODE';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| gtid_mode | OFF |
+---------------+-------+
1 row in set (0.00 sec)
次に、SET GLOBAL ENFORCE_GTID_CONSISTENCY = offを設定します。
localhost "mgr01" 11:29:03 test01>show variables like 'ENFORCE_GTID_CONSISTENCY';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| enforce_gtid_consistency | OFF |
+--------------------------+-------+
**到此时在线把Gtid关闭掉了。**
再次执行
createtablemenu_tmp01 as select id、name、level、url from menu.tmp
;
テーブルmenu_tmp02を作成しますmenu.tmp
。からid、name、level、urlを選択します。
localhost "mgr01" 11:29:17 test01>create table menu_tmp01 as select id,name,level,url from `menu.tmp`;
Query OK, 10 rows affected (0.04 sec)
Records: 10 Duplicates: 0 Warnings: 0
localhost "mgr01" 11:30:10 test01>desc menu_tmp01;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | NO | | 0 | |
| name | varchar(255) | YES | | NULL | |
| level | int(11) | YES | | 1 | |
| url | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
localhost "mgr01" 11:30:20 test01>create table menu_tmp02 select id,name,level,url from `menu.tmp`;
Query OK, 10 rows affected (0.04 sec)
Records: 10 Duplicates: 0 Warnings: 0
localhost "mgr01" 11:30:45 test01>desc menu_tmp02;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | NO | | 0 | |
| name | varchar(255) | YES | | NULL | |
| level | int(11) | YES | | 1 | |
| url | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
localhost "mgr01" 11:30:50 test01>
次にシナリオ1。LOADファイルにはデータテーブルよりも多くのフィールドがあります。デモンストレーションのために、テキストファイルのデータの一部のみをデータテーブルにインポートします。
-インポートデータステートメント
load data infile '/data/mysql/tmp/b_menu.txt' replace into table test01.menu_tmp01 character set utf8mb4 fields terminated by ',' enclosed by '"' lines terminated by '\n' (@C1,@C2,@C3,@C4,@C5,@C6,@7,@8,@9,@10) set id=@C1, name=@C2, level=@C4, url=@C5;
データのインポート:
load data infile '/data/mysql/tmp/b_menu.txt'
replace into table test01.menu_tmp01
character set utf8mb4
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
(@C1,@C2,@C3,@C4,@C5,@C6,@7,@8,@9,@10) -- 该部分对应b_menu.txt件中10列数据
-- 只对导出数据中指定的2个列与表中字段做匹配,mapping关系指定的顺序不影响导入结果
set id=@C1,
name=@C2,
level=@C4,
url=@C5;
localhost "mgr01" 11:46:19 test01>load data infile '/data/mysql/tmp/b_menu.txt'
-> replace into table test01.menu_tmp01
-> character set utf8mb4
-> fields terminated by ','
-> enclosed by '"'
-> lines terminated by '\n'
-> (@C1,@C2,@C3,@C4,@C5,@C6,@7,@8,@9,@10) -- 该部分对应b_menu.txt件中10列数据
-> -- 只对导出数据中指定的2个列与表中字段做匹配,mapping关系指定的顺序不影响导入结果
-> set id=@C1,
-> name=@C2,
-> level=@C4,
-> url=@C5;
Query OK, 10 rows affected (0.01 sec)
Records: 10 Deleted: 0 Skipped: 0 Warnings: 0
localhost "mgr01" 11:46:26 test01>select * from menu_tmp01;
+----+--------------------+-------+---------------------+
| id | name | level | url |
+----+--------------------+-------+---------------------+
| 1 | 核心数据指标 | 2 | /index |
| 2 | 易机数据 | 2 | /auction-dashboard |
| 3 | 产品滞留数据 | 2 | /product-dashboard |
| 4 | 发货数据 | 3 | /product-data |
| 6 | 退租数据 | 2 | /tuizushuju |
| 7 | 呆滞数据 | 2 | /daizhishuju |
| 10 | 发货数据明细 | 2 | /shujumingxi |
| 12 | 增率统计 | 3 | /branch-dashboard |
| 13 | 增率详细 | 3 | /customer-dashboard |
| 14 | 产品部数据 | 1 | /svn7kezaqe9 |
+----+--------------------+-------+---------------------+
10 rows in set (0.00 sec)
シナリオ2.LOADファイルにはデータテーブルよりも少ないフィールドがあります
注:テーブルフィールドには、テキストファイル内のすべてのデータが含まれるだけでなく、追加のフィールドも含まれます
MySQLテーブルtest01.b_menuの一部のフィールドのデータをテキストファイルにエクスポートします。
select id,name,url,create_time into outfile '/data/mysql/tmp/c_menu.txt' character set utf8mb4 fields terminated by ',' enclosed by '"' lines terminated by '\n' from test01.b_menu limit 10;
[root@test tmp]# cat /data/mysql/tmp/c_menu.txt
"1","核心数据指标","/index","2019-06-19 19:58:10"
"2","易机数据","/auction-dashboard","2019-06-19 19:58:24"
"3","产品滞留数据","/product-dashboard","2019-06-19 19:58:42"
"4","发货数据","/product-data","2019-08-29 17:44:35"
"6","退租数据","/tuizushuju","2019-09-25 19:05:47"
"7","呆滞数据","/daizhishuju","2019-09-25 19:12:29"
"10","发货数据明细","/shujumingxi","2019-09-25 19:15:37"
"12","增率统计","/branch-dashboard","2019-09-26 21:23:16"
"13","增率详细","/customer-dashboard","2019-09-26 21:23:46"
"14","产品部数据","/svn7kezaqe9","2019-09-29 21:58:09"
テストテーブルa_menuを作成します。
CREATE TABLE `a_menu` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜单名称',
`parent_id` int(11) DEFAULT '0' COMMENT '父菜单id',
`level` int(11) DEFAULT '1' COMMENT '菜单等级,从1开始',
`url` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜单链接',
`icon` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜单图标',
`order` int(11) DEFAULT NULL COMMENT '同级菜单顺序',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`menu_type` int(3) DEFAULT '2' COMMENT '菜单类型:0:目录,1:页面,2:不区分(兼容老数据)',
PRIMARY KEY (`id`),
UNIQUE KEY `unique_menu_name_level_parent_id` (`name`,`level`,`parent_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
load data infile '/data/mysql/tmp/c_menu.txt'
replace into table test01.a_menu
character set utf8mb4
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
(@C1,@C2,@C3,@C4,@C5,@C6,@7,@8,@9,@10) -- 该部分对应test01.a_menu表中10列字段
-- 只对导出数据中指定的4个列与表中字段做匹配,mapping关系指定的顺序不影响导入结果. a_menu表中多出的字段不做处理,这些表字段以设定的默认值和null来处理
set id=@C1, name=@C2, url=@C3, create_time=@C4; -- 此行set后面的这些@C1 @C2 @C3 @C4 指的是导出文件/data/mysql/tmp/c_menu.txt中的前后顺序的4列数值。
次のSQLは正しい姿勢です。
localhost "mgr01" 12:50:02 (none)>load data infile '/data/mysql/tmp/c_menu.txt' replace into table test01.a_menu character set utf8mb4 fields terminated by ',' enclosed by '"' lines terminated by '\n' (@C1,@C2,@C3,@C4,@C5,@C6,@7,@8,@9,@10) set id=@C1, name=@C2, url=@C3, create_time=@C4;
Query OK, 10 rows affected (0.02 sec)
Records: 10 Deleted: 0 Skipped: 0 Warnings: 0
localhost "mgr01" 12:50:23 (none)>select * from test01.a_menu;
+----+--------------------+-----------+-------+---------------------+------+-------+---------------------+---------------------+-----------+
| id | name | parent_id | level | url | icon | order | create_time | update_time | menu_type |
+----+--------------------+-----------+-------+---------------------+------+-------+---------------------+---------------------+-----------+
| 1 | 核心数据指标 | 0 | 1 | /index | NULL | NULL | 2019-06-19 19:58:10 | 2021-03-27 12:50:23 | 2 |
| 2 | 易机数据 | 0 | 1 | /auction-dashboard | NULL | NULL | 2019-06-19 19:58:24 | 2021-03-27 12:50:23 | 2 |
| 3 | 产品滞留数据 | 0 | 1 | /product-dashboard | NULL | NULL | 2019-06-19 19:58:42 | 2021-03-27 12:50:23 | 2 |
| 4 | 发货数据 | 0 | 1 | /product-data | NULL | NULL | 2019-08-29 17:44:35 | 2021-03-27 12:50:23 | 2 |
| 6 | 退租数据 | 0 | 1 | /tuizushuju | NULL | NULL | 2019-09-25 19:05:47 | 2021-03-27 12:50:23 | 2 |
| 7 | 呆滞数据 | 0 | 1 | /daizhishuju | NULL | NULL | 2019-09-25 19:12:29 | 2021-03-27 12:50:23 | 2 |
| 10 | 发货数据明细 | 0 | 1 | /shujumingxi | NULL | NULL | 2019-09-25 19:15:37 | 2021-03-27 12:50:23 | 2 |
| 12 | 增率统计 | 0 | 1 | /branch-dashboard | NULL | NULL | 2019-09-26 21:23:16 | 2021-03-27 12:50:23 | 2 |
| 13 | 增率详细 | 0 | 1 | /customer-dashboard | NULL | NULL | 2019-09-26 21:23:46 | 2021-03-27 12:50:23 | 2 |
| 14 | 产品部数据 | 0 | 1 | /svn7kezaqe9 | NULL | NULL | 2019-09-29 21:58:09 | 2021-03-27 12:50:23 | 2 |
+----+--------------------+-----------+-------+---------------------+------+-------+---------------------+---------------------+-----------+
10 rows in set (0.00 sec)
シナリオ3.LOADはカスタムフィールドデータを生成します。
シナリオ2の検証から、empテーブルの新しいフィールドfullname、modify_date、およびdelete_flagフィールドはインポート中に処理されず、NULL値に設定されていることがわかります。これらを処理する必要がある場合は、次の方法でサポートできます。 LOAD中のMySQL関数または指定された固定値は、自分でデータを定義できます。また、インポートおよびエクスポートと組み合わせて、ファイルに存在するフィールドの関数処理を実行し、以下に示すような単純なETL関数を実現できます。
-インポートデータステートメント
load data infile '/data/mysql/3306/tmp/employees.txt'
replace into table demo.emp
character set utf8mb4
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
(@C1,@C2,@C3,@C4,@C5,@C6) -- 该部分对应employees.txt文件中6列数据
-次の部分では、テーブルのフィールドとデータファイルのフィールドの間のマッピング関係を明確に定義し、存在しないデータは関数処理によって生成されます(固定値に設定することもできます)
set emp_no=@C1,
birth_date=@C2,
first_name=upper(@C3), -- 将导入的数据转为大写
last_name=lower(@C4), -- 将导入的数据转为小写
fullname=concat(first_name,' ',last_name), -- 对first_name和last_name做拼接
gender=@C5,
hire_date=@C6 ,
modify_date=now(), -- 生成当前时间数据
delete_flag=if(hire_date<'1988-01-01','Y','N'); -- 对需要生成的值基于某一列做条件运算
シナリオ4.固定長データをロードする
参照ドキュメント:https:
//mp.weixin.qq.com/s/WNXRshkvC3bFcc5NDaWlrw
5、LOADの概要
- デフォルトでは、インポートの順序は、テキストファイルの列(左から右、行)の順序で上から下になります。
- テーブル構造がテキストデータと矛盾する場合は、データが間違ったフィールドにインポートされないように、テキストファイルの列に順番に番号を付け、テーブルのフィールドとのマッピング関係を確立することをお勧めします。
- インポートするテキストファイルが大きいシーンでは、分割など、ファイルを1行ずつ複数の小さなファイルに分割することをお勧めします。
- ファイルをインポートした後、次のステートメントを実行して、インポートされたデータに警告、エラー、およびインポートされたデータの量があるかどうかを確認することをお勧めします
。GETDIAGNOSTICS@ p1 = NUMBER、@ p2 = ROW_COUNT;
select @ p1 AS ERROR_COUNT、@ p2 as ROW_COUNT; - テキストファイルデータとテーブル構造の違いが大きすぎるか、データをクリーンアップして変換する必要があります。処理と変換の前に、プロのETLツールを使用するか、MySQLに大まかにインポートすることをお勧めします。