当前位置:七道奇文章资讯数据防范MySQL防范
日期:2011-05-02 15:44:00  来源:本站整理

MySQL数据导入与导出之二[MySQL防范]

赞助商链接



  本文“MySQL数据导入与导出之二[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
  目前利用MySQL的越来越多了,我也用它做了自已的留言板.在利用历程中,渐渐地就要求对它的管理
功效需求近一步的掌握,不但是我,也是很多网友的要求.目前有一些问题是关于若何从MySQL中导出数据,
以便用在本地或别的的数据库系统之上;以及将现有数据导入MySQL数据库中.目前就我学习的情形,就这
两个问题作一下小结,内容不是很具体.其实MySQL的手册是很具体的,只不过我把有关这两方面的东西提
取出来,加上了一点自已的理解,更具体的请参考数据库的呼应章节.

数据导出
  数据导出主要有以下几种办法:

利用select into outfile 'filename'语句
利用mysqldump实用程序
利用select into outfile 'filename'语句

  可以在mysql号令行下或在PHP程序中履行它.我下面以在mysql号令行下为例.在php中利用时,将其
改成呼应的查询举行处理便可.不过在利用这个号令时,要求用户拥有file的权限.如我们有一个库为
phptest,此中有一个表为driver.目前要把driver卸成文件.履行号令:


mysql> use phptest;
Database Changed
mysql> select * from driver into outfile 'a.txt';
Query OK, 22 rows affected (0.05 sec)

  上面便可以完成将表driver从数据库中卸到a.txt文件中.注意文件名要加单引号.那么这个文件在哪
呢?在mysql目录下有一个data目录,它便是数据库文件所放的地方.每个库在单独占一个子目录,所以
phptest的目录为c:mysqldataphptest(注意:我的mysql安装在c:mysql下).好,目前我们进去,a.txt
就是它.翻开这个文件,大概是:

1 Mika Hakinnen 1
2 David Coulthard 1
3 Michael SchuMacher 2
4 Rubens Barrichello 2
...

  大概还有很多记录.每个字段之间是用制表符脱离的(t).那么我们可以改正输出文件名的目录,以便
放在指定的位置.如'a.txt'可以改成'./a.txt'或'/a.txt'.此中'./a.txt'放在c:mysqldata目录下了,
而'/a.txt'文件则放在c:目录下了.所以select号令认为的当前目录是数据库的存放目录,这里是
c:mysqldata.

  利用select号令还可以指定卸出文件时,字段之间的脱离字符,转义字符,包含字符,及记录行脱离字
符.列在下面:

FIELDS
TERMINATED BY 't'
[OPTIONALLY] ENCLOSED BY ''
ESCAPED BY '\'
LINES
TERMINATED BY 'n'


TERMINATED 表示字段脱离
[OPTIONALLY] ENCLOSED 表示字段用什么字符包含起来,假如利用了OPTIONALLY则只有CHAR和VERCHAR
被包含
ESCAPED 表示当需求转义时用什么作为转义字符
LINES TERMINATED 表示每行记录之间用什么脱离
  上面列的是缺省值,并且这些项都是可选的,不选则利用缺省值.可以按照需求举行改正.给出一个例
子以下:
mysql> select * from driver into outfile 'a.txt' fields terminated by ',' enclosed by '"';
Query OK, 22 rows affected (0.06 sec)

  后果大概以下:

"1","Mika","Hakinnen","1"
"2","David","Coulthard","1"
"3","Michael","Schumacher","2"
"4","Rubens","Barrichello","2"
...

  可以看到每个字段都用','举行了脱离,且每个字段都用'"'包含了起来.注意,行记录脱离符可以是
一个字符串,请大家自行测试.不过,假如输出文件在指定目录下假如存在的话就会报错,先删除再测
试便可.

利用mysqldump实用程序

  从上面的select办法可以看出,输出的文件只有数据,而没有表构造.并且,一次只能处理一个表,要
处理多个表则不是很简单的.不过可以将select号令写入一个sql 文件(复制文本应当是很简单的吧),然
后在号令行下履行便可:mysql 库名的号令),也可以卸出纯数据文本或只卸出含有成立表构造而没有数据的sql 文件,同时可以对库中的多个
表举行操作,比select的办法可机动,强盛的多,倡议利用.下面就具体阐明.

  先来个最简单的吧:

mysqldump phptest > a.sql

  大概后果以下:
# MySQL dump 7.1
#
# Host: localhost Database: phptest
#--------------------------------------------------------
# Server version 3.22.32-shareware-debug

#
# Table structure for table 'driver'
#
CREATE TABLE driver (
drv_id int(11) DEFAULT '0' NOT NULL auto_increment,
drv_forename varchar(15) DEFAULT '' NOT NULL,
drv_surname varchar(25) DEFAULT '' NOT NULL,
drv_team int(11) DEFAULT '0' NOT NULL,
PRIMARY KEY (drv_id)
);

#
# Dumping data for table 'driver'
#

INSERT INTO driver VALUES (1,'Mika','Hakinnen',1);
INSERT INTO driver VALUES (2,'David','Coulthard',1);
INSERT INTO driver VALUES (3,'Michael','Schumacher',2);
INSERT INTO driver VALUES (4,'Rubens','Barrichello',2);
...

  假若有多表,则辨别列在下面.可以看到这个文件是一个完好的sql文件,假如要将其导入到别的的数
据库中可以通过号令行方法,很便利:mysql phptest < a.sql.假如将数据从本地传到服务器上,则可以
将这个文件上传,然后在服务器通过号令行方法装入数据.

  假如只想卸出建表指令,则号令以下:

mysqldump -d phptest > a.sql

  假如只想卸出插入数据的sql号令,而不需求建表号令,则号令以下:

mysqldump -t phptest > a.sql

  那么假如我只想要数据,而不想要什么sql号令时,应当若何操作呢?

mysqldump -T./ phptest driver

  此中,只有指定了-T参数才可以卸出纯文本文件,表示卸出数据的目录,./表示当前目录,即与
mysqldump同一目录.假如不指定driver表,则将卸出整个数据库的数据.每个表会生成两个文件,一个为
.sql文件,包含建表履行.另一个为.txt文件,只包含数据,且没有sql指令.

  对卸出的数据文件,也可以同select办法一样,指定字段脱离符,包含字符,转义字段,行记录脱离符.
参数列在下面:

--fields-terminated-by= 字段脱离符
--fields-enclosed-by= 字段包含符
--fields-optionally-enclosed-by= 字段包含符,只用在CHAR和VERCHAR字段上
--fields-escaped-by= 转义字符
--lines-terminated-by= 行记录脱离符
  我想大家应当懂得这些参数的意思了吧.一个例子以下:

mysqldump -T./ --fields-terminated-by=, --fields-enclosed-by=" phptest driver

  输出后果为:

"1","Mika","Hakinnen","1"
"2","David","Coulthard","1"
"3","Michael","Schumacher","2"
"4","Rubens","Barrichello","2"
...

  请注意字符的利用.

小结
  以上为利用select和mysqldump实用程序来卸出文本的办法.select合适操纵程序举行处理,而mysqldump
则为手工操作,同时供应强盛的导出功效,并且可以处理整个库,或库中指定的多表.大家可以按照需求自
行决意利用.

  同时还有一些办法,如直接数据库文件拷贝也可以,但是移动后的数据库系统与原系统应一致才行.这
里就不再提了.

导入
  同导出相近似,导入也有两种办法:
利用LOAD DATA INFILE 'filename'号令
利用mysqlimport实用程序
  由于这两个处理与导出参数类似,只不过是它们的逆操作,故只给出几种号令利用的例子,不再注释了,
大家可以自行查阅手册.

  利用load号令:

load data infile 'driver.txt' into table driver fields terminated by ',' enclosed by '"';

  利用mysqlimport实用程序:

mysqlimport --fields-terminated-by=, --fields-enclosed-by=" phptest driver.txt

  文章有不细致的地方,但愿大家参考手册.   以上是“MySQL数据导入与导出之二[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • Windows 搭配 IIS7 PHP MySQL 环境
  • mysql Out of memory (Needed 16777224 bytes)的错误办理
  • mysql提醒[Warning] Invalid (old?) table or database name问题的办理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • MySQL Order By语法介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • mysql数据库插入速度和读取速度的调整记录
  • MySQL Order By索引优化办法
  • MySQL Order By用法分享
  • mysql #1062 –Duplicate entry ''1'' for key ''PRIMARY''
  • MySQL Order By Rand()效率解析
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .