|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
HTML中的任何元素都要亲自实践,只有明白了什么元素会起到什么效果之后,你才会记忆深刻,而一味的啃书,绝对是不行的,我想大部分新手之所以觉得概念难学,大部分是一个字“懒”,懒是阻止进步的最大敌人,所以克服掉懒的习惯,才能更快的学好一样东西。mysql|数据 小木学编程 之 MySQL数据导入与导出
作者:limodou
如今利用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:\mysql\data\phptest(注重:我的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:\mysql\data目次下了,
而'/a.txt'文件则放在c:\目次下了。所以select号令以为确当前目次是数据库的寄存目次,这里是
c:\mysql\data。
利用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 库名<a.sql。而利用mysqldump可以卸出sql文件格局信息(即,内容为sql
的号令),也能够卸出纯数据文本或只卸出含有创立表布局而没无数据的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适用法式
利用sql文件
因为前两个处置与导出处置类似,只不外是它们的逆操作,故只给出几种号令利用的例子,不再注释了,
人人可以自行查阅手册。
利用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
关于第三种,则可使用由mysqldump导出的sql文件,在号令行下履行mysql 库名<sql文件便可,不再细
说了。
文章有不详实的中央,但愿人人参考手册。
PHP成功的插入,删除,更新数据的时候,显然,你已经距离成功指日可待了。 |
|