MySQL中表数据的导入导出
1、表数据的导出:select...into oufile 'file_name'
简化语法:
SELECT *[|xxx] FROM tablename INTO OUTFILE 'file_name' [CHARACTER SET charset_name][{FIELDS |COLUMNS}[TERMINATED BY 'string'];
SELECT *[|xxx] INTOOUTFILE 'file_name' [CHARACTER SET charset_name][{FIELDS | COLUMNS}[TERMINATEDBY 'string'] FROM tablename;
报错解决:
mysql> select * from students intooutfile "/var/lib/mysql/tmp/students.sql";
ERROR 1 (HY000): Can'tcreate/write to file '/var/lib/mysql/tmp/students.sql' (Errcode: 2)
报错解决:在配置文件中创建临时目录,并重启服务器
[root@www mysql]# vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
tmpdir=/var/lib/mysql/tmp
socket=/var/lib/mysql/mysql.sock
[root@www mysql]# mkdir tmp
[root@www mysql]# chown -R mysql.mysql tmp
[root@test mysql]# vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
tmpdir=/var/lib/mysql/tmp
socket=/var/lib/mysql/mysql.sock
[root@test mysql]# chown -R mysql.mysql tmp
[root@test mysql]# service mysqld restart;ssh www "service mysqld restart"
停止 mysqld: [确定]
正在启动 mysqld: [确定]
停止 mysqld: [确定]
正在启动 mysqld: [确定]
用法示例:
例1:基础用法
[root@www ~]# mysql -u root
mysql> use hellodb
mysql> show tables;
+-------------------+
| Tables_in_hellodb |
+-------------------+
| classes |
| coc |
| courses |
| scores |
| students |
| teachers |
| test |
| toc |
+-------------------+
8 rows in set (0.00 sec)
mysql> select * from students intooutfile "/var/lib/mysql/tmp/students.sql";
Query OK, 27 rows affected (0.00 sec)
mysql> select * into outfile"/var/lib/mysql/tmp/classes.sql" from classes;
Query OK, 8 rows affected (0.00 sec)
例2:指定分隔符导出
mysql> select * from students intooutfile "/var/lib/mysql/tmp/students1.sql" fields terminated by '|';
Query OK, 27 rows affected (0.00 sec)
fields terminated by'|' <--指定分隔符为"|"
[root@www tmp]# ll
总用量 8
-rw-rw-rw-. 1 mysql mysql 135 6月 9 21:44 classes.sql
-rw-rw-rw-. 1 mysql mysql 623 6月 9 21:41 students.sql
[root@www tmp]#
[root@www tmp]# catclasses.sql <--默认以tab键分隔字段
1 ShaolinPai 10
2 EmeiPai 7
3 QingChengPai 11
4 WudangPai 12
5 RiyueShenjiao 31
6 LianshanPai 27
7 MingJiao 27
8 XiaoyaoPai 15
[root@www tmp]# head students1.sql -n 3
1|Shi Zhongyu|22|M|2|3 <--指定"|"为分隔符
2|Shi Potian|22|M|1|7
3|Xie Yanke|53|M|2|16
注意:mysql文件load出的目录必须定义在my.cnf中,否则即便是定义为777、MySQL属主属组也无法写入。
如下报错:Can't create/write tofile
[root@www field]# chmod 777 mysqlbak/
[root@www field]# ll
drwxrwxrwx. 2 mysql mysql 4096 6月 9 21:51 mysqlbak
mysql> select * from classes intooutfile "/field/mysqlbak/classes.sql" ;
ERROR 1 (HY000): Can't create/write to file'/field/mysqlbak/classes.sql' (Errcode: 13)
2、表数据的导入:loaddata infile 'file_name' into ...
语法:
mysql> help LOAD DATA;
Name: 'LOAD DATA'
Description:
Syntax:
LOAD DATA [LOW_PRIORITY | CONCURRENT][LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[CHARACTER SET charset_name]
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_name_or_user_var,...)]
[SET col_name = expr,...]
简化语法:
LOAD DATA INFILE 'file_name' INTO TABLE tbl_name [{FIELDS |COLUMNS} [TERMINATED BY 'string'];
用法示例:
例1:基本用法
[root@www tmp]# cat classes.sql>classes2.sql
[root@www tmp]# vim classes2.sql
1 ShaolinPai 10
2 EmeiPai 7
3 QingChengPai 11
4 WudangPai 12
5 RiyueShenjiao 31
6 LianshanPai 27
7 MingJiao 27
8 XiaoyaoPai 15
9 HuaShanPai 32
10 FuweiBiaoju 19
mysql> create table paixi like classes;
Query OK, 0 rows affected (0.05 sec)
mysql> load data infile"/var/lib/mysql/tmp/classes2.sql" into table paixi;
Query OK, 10 rows affected (0.01 sec)
Records: 10 Deleted: 0 Skipped: 0 Warnings: 0
mysql> select * from paixi;
+---------+----------------+----------+
| ClassID | Class | NumOfStu |
+---------+----------------+----------+
| 1 | Shaolin Pai | 10 |
| 2 | Emei Pai | 7 |
| 3 | QingCheng Pai | 11 |
| 4 | Wudang Pai | 12 |
| 5 | Riyue Shenjiao | 31 |
| 6 | Lianshan Pai | 27 |
| 7 | Ming Jiao | 27 |
| 8 | Xiaoyao Pai | 15 |
| 9 | HuaShan Pai | 32 |
| 10 | Fuwei Biaoju | 19 |
+---------+----------------+----------+
10 rows in set (0.00 sec)
例2:指定导入分隔符
设置分隔符时,读进去文件也必须指定分隔符,否则将值为NULL
[root@www tmp]# sed 's/\t/\|/g'classes2.sql >classes3.sql
[root@www tmp]# head -n 2 classes3.sql
1|Shaolin Pai|10
2|Emei Pai|7
mysql> delete from paixi;
Query OK, 10 rows affected (0.01 sec)
mysql> select * from paixi;
Empty set (0.00 sec)
mysql> load data infile"/var/lib/mysql/tmp/classes3.sql" into table paixi;
Query OK, 10 rows affected, 30 warnings(0.01 sec)
Records: 10 Deleted: 0 Skipped: 0 Warnings: 30
mysql> select * from paixi;
+---------+-------+----------+
| ClassID | Class | NumOfStu |
+---------+-------+----------+
| 1 | NULL | NULL |
| 2 | NULL | NULL |
| 3 | NULL | NULL |
| 4 | NULL | NULL |
| 5 | NULL | NULL |
| 6 | NULL | NULL |
| 7 | NULL | NULL |
| 8 | NULL | NULL |
| 9 | NULL | NULL |
| 10 | NULL | NULL |
+---------+-------+----------+
10 rows in set (0.01 sec)
mysql> delete from paixi;
Query OK, 10 rows affected (0.01 sec)
mysql> load data infile"/var/lib/mysql/tmp/classes3.sql" into table paixi fields terminatedby '|';
Query OK, 10 rows affected (0.01 sec)
Records: 10 Deleted: 0 Skipped: 0 Warnings: 0
mysql> select * from paixi;
+---------+----------------+----------+
| ClassID | Class | NumOfStu |
+---------+----------------+----------+
| 1 | Shaolin Pai | 10 |
| 2 | Emei Pai | 7 |
| 3 | QingCheng Pai | 11 |
| 4 | Wudang Pai | 12 |
| 5 | Riyue Shenjiao | 31 |
| 6 | Lianshan Pai | 27 |
| 7 | Ming Jiao | 27 |
| 8 | Xiaoyao Pai | 15 |
| 9 | HuaShan Pai | 32 |
| 10 | Fuwei Biaoju | 19 |
+---------+----------------+----------+
10 rows in set (0.01 sec)
注意:同样的,mysql文件读进去服务器的目录必须定义在my.cnf中,否则即便是定义为777、MySQL属主属组也无法写入。
如下报错:Can't create/write tofile
[root@www tmp]# cp classes2.sql/field/mysqlbak/
[root@www tmp]# ll/field/mysqlbak/classes2.sql
-rw-r--r--. 1 root root 172 6月 9 23:02 /field/mysqlbak/classes2.sql
mysql> delete from paixi;
Query OK, 10 rows affected (0.05 sec)
mysql> select * from paixi;
Empty set (0.00 sec)
mysql> load data infile"/field/mysqlbak/classes2.sql" into table paixi;
ERROR 13 (HY000): Can't get stat of'/field/mysqlbak/classes2.sql' (Errcode: 13)
[root@www tmp]# chmod 775 /field/mysqlbak/classes2.sql
[root@www tmp]# chown mysql.mysql /field/mysqlbak/classes2.sql
mysql> load data infile"/field/mysqlbak/classes2.sql" into table paixi;
ERROR 13 (HY000): Can't get stat of'/field/mysqlbak/classes2.sql' (Errcode: 13)
mysql> load data infile"/field/mysqlbak/classes2.sql" into table paixi;