MySQL中表数据的导入导出

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中,否则即便是定义为777MySQL属主属组也无法写入。

如下报错: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中,否则即便是定义为777MySQL属主属组也无法写入。

如下报错: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;

猜你喜欢

转载自blog.csdn.net/Field_Yang/article/details/80657595
今日推荐