MySQL数据导入导出.docx

上传人:b****7 文档编号:11432609 上传时间:2023-03-01 格式:DOCX 页数:17 大小:24.42KB
下载 相关 举报
MySQL数据导入导出.docx_第1页
第1页 / 共17页
MySQL数据导入导出.docx_第2页
第2页 / 共17页
MySQL数据导入导出.docx_第3页
第3页 / 共17页
MySQL数据导入导出.docx_第4页
第4页 / 共17页
MySQL数据导入导出.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

MySQL数据导入导出.docx

《MySQL数据导入导出.docx》由会员分享,可在线阅读,更多相关《MySQL数据导入导出.docx(17页珍藏版)》请在冰豆网上搜索。

MySQL数据导入导出.docx

MySQL数据导入导出

MySQL数据导入导出(转载)

数据导出

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

1)使用selectintooutfile"filename"语句

2)使用mysqldump实用程序

使用selectintooutfile"filename"语句

可以在mysql的命令行下或在php程序中执行它。

我下面以在mysql命令行下为例。

在php中使用时,将其改成相应的查询进行处理即可。

不过在使用这个命令时,要求用户拥有file的权限。

如我们有一个库为phptest,其中有一个表为driver。

现在要把driver卸成文件。

执行命令:

mysql>usephptest;

DatabaseChanged

mysql>select*fromdriverintooutfile"a.txt";

QueryOK,22rowsaffected(0.05sec)

上面就可以完成将表driver从数据库中卸到a.txt文件中。

注意文件名要加单引号。

那么这个文件在哪呢?

在mysql目录下有一个data目录,它即是数据库文件所放的地方。

每个库在单独占一个子目录,所以phptest的目录为c:

\mysql\data\phptest(注意:

我的mysql安装在c:

\mysql下)。

好,现在我们进去,a.txt就是它。

打开这个文件,可能是:

1MikaHakinnen1

2DavidCoulthard1

3MichaelSchumacher2

4RubensBarrichello2

...

可能还有很多记录。

每个字段之间是用制表符分开的(\t)。

那么我们可以修改输出文件名的目录,以便放在指定的位置。

如"a.txt"可以改成"./a.txt"或"/a.txt"。

其中"./a.txt"放在

c:

\mysql\data目录下了,

而"/a.txt"文件则放在c:

\目录下了。

所以select命令认为的当前目录是数据库的存放目录,

这里是

c:

\mysql\data。

使用select命令还可以指定卸出文件时,字段之间的分隔字符,转义字符,包括字符,及记录行分隔字符。

列在下面:

FIELDS

TERMINATEDBY"\t"

[OPTIONALLY]ENCLOSEDBY""

ESCAPEDBY"\\"

LINES

TERMINATEDBY"\n"

TERMINATED表示字段分隔

[OPTIONALLY]ENCLOSED表示字段用什么字符包括起来,如果使用了OPTIONALLY则只有CHAR和VERCHAR被包括ESCAPED表示当需要转义时用什么作为转义字符LINESTERMINATED表示每行记录之间用什么分隔

上面列的是缺省值,而且这些项都是可选的,不选则使用缺省值。

可以根据需要进行修改。

给出一个例子如下:

mysql>select*fromdriverintooutfile"a.txt"fieldsterminatedby","enclosedby""";

QueryOK,22rowsaffected(0.06sec)

结果可能如下:

"1","Mika","Hakinnen","1"

"2","David","Coulthard","1"

"3","Michael","Schumacher","2"

"4","Rubens","Barrichello","2"

...

可以看到每个字段都用","进行了分隔,且每个字段都用"""包括了起来。

注意,行记录分隔符可以是一个字符串,请大家自行测试。

不过,如果输出文件在指定目录下如果存在的话就会报错,先删除再测试即可。

使用mysqldump实用程序

从上面的select方法可以看出,输出的文件只有数据,而没有表结构。

而且,一次只能处理一个表,要处理多个表则不是很容易的。

不过可以将select命令写入一个sql文件(复制文本应该是很容易的吧),然后在命令行下执行即可:

mysql库名先来个最简单的吧:

mysqldumpphptest>a.sql

可能结果如下:

#MySQLdump7.1

#

#Host:

localhostDatabase:

phptest

#--------------------------------------------------------

#Serverversion3.22.32-shareware-debug

#

#Tablestructurefortable"driver"

#

CREATETABLEdriver(

drv_idint(11)DEFAULT"0"NOTNULLauto_increment,

drv_forenamevarchar(15)DEFAULT""NOTNULL,

drv_surnamevarchar(25)DEFAULT""NOTNULL,

drv_teamint(11)DEFAULT"0"NOTNULL,

PRIMARYKEY(drv_id)

);

#

#Dumpingdatafortable"driver"

#

INSERTINTOdriverVALUES(1,"Mika","Hakinnen",1);

INSERTINTOdriverVALUES(2,"David","Coulthard",1);

INSERTINTOdriverVALUES(3,"Michael","Schumacher",2);

INSERTINTOdriverVALUES(4,"Rubens","Barrichello",2);

...

如果有多表,则分别列在下面。

可以看到这个文件是一个完整的sql文件,如果要将其导入到其它的数据库中可以通过命令行方式,很方便:

mysqlphptest

如果将数据从本地传到服务器上,则可以将这个文件上传,然后在服务器通过命令行方式装入数据。

如果只想卸出建表指令,则命令如下:

mysqldump-dphptest>a.sql

如果只想卸出插入数据的sql命令,而不需要建表命令,则命令如下:

mysqldump-tphptest>a.sql

那么如果我只想要数据,而不想要什么sql命令时,应该如何操作呢?

mysqldump-T./phptestdriver

其中,只有指定了-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=\"phptestdriver

输出结果为:

"1","Mika","Hakinnen","1"

"2","David","Coulthard","1"

"3","Michael","Schumacher","2"

"4","Rubens","Barrichello","2"

...

请注意字符的使用。

小结

以上为使用select和mysqldump实用程序来卸出文本的方法。

select适合利用程序进行处理,而mysqldump则为手工操作,同时提供强大的导出功能,并且可以处理整个库,或库中指定的多表。

大家可以根据需求自行决定使用。

同时还有一些方法,如直接数据库文件拷贝也可以,但是移动后的数据库系统与原系统应一致才行。

这里就不再提了。

============================================================================

导入

同导出相类似,导入也有两种方法:

1)使用LOADDATAINFILE"filename"命令

2)使用mysqlimport实用程序

3)使用sql文件

由于前两个处理与导出处理相似,只不过是它们的逆操作,故只给出几种命令使用的例子,不再解释了,大家可以自行查阅手册。

使用load命令:

loaddatainfile"driver.txt"intotabledriverfieldsterminatedby","enclosedby""";

使用mysqlimport实用程序:

mysqlimport--fields-terminated-by=,--fields-enclosed-by=\"phptestdriver.txt

对于第三种,则可以使用由mysqldump导出的sql文件,在命令行下执行:

mysql库名

1.MySQLimport的语法介绍:

MySQLimport位于MySQL/bin目录中,是MySQL的一个载入(或者说导入)数据的一个非常有效的工具。

这是一个命令行工具。

有两个参数以及大量的选项可供选择。

这个工具把一个文本文件(textfile)导入到你指定的数据库和表中。

比方说我们要从文件Customers.txt中把数据导入到数据库Meet_A_Geek中的表Custermers中:

MySQLimportMeet_A_GeekCustomers.txt

注意:

这里Customers.txt是我们要导入数据的文本文件,而Meet_A_Geek是我们要操作的数据库,数据库中的表名是Customers,这里文本文件的数据格式必须与Customers表中的记录格式一致,否则MySQLimport命令将会出错。

其中表的名字是导入文件的第一个句号(.)前面文件字符串,另外一个例子:

MySQLimportMeet_A_GeekCus.to.mers.txt

那么我们将把文件中的内容导入到数据库Meet_A_Geek中的Cus表中。

上面的例子中,都只用到两个参数,并没有用到更多的选项,下面介绍MySQLimport的选项

2.MySQLimport的常用选项介绍:

选项功能

-dor--delete新数据导入数据表中之前删除数据数据表中的所有信息

-for--force不管是否遇到错误,MySQLimport将强制继续插入数据

-ior--ignoreMySQLimport跳过或者忽略那些有相同唯一关键字的行,导入文件中的数据将被忽略。

-lor-lock-tables数据被插入之前锁住表,这样就防止了,你在更新数据库时,用户的查询和更新受到影响。

-ror-replace这个选项与-i选项的作用相反;此选项将替代表中有相同唯一关键字的记录。

--fields-enclosed-by=char指定文本文件中数据的记录时以什么括起的,很多情况下数据以双引号括起。

默认的情况下数据是没有被字符括起的。

--fields-terminated-by=char指定各个数据的值之间的分隔符,在句号分隔的文件中,分隔符是句号。

您可以用此选项指定数据之间的分隔符。

默认的分隔符是跳格符(Tab)

--lines-terminated-by=str此选项指定文本文件中行与行之间数据的分隔字符串或者

字符。

默认的情况下MySQLimport以newline为行分隔符。

您可以选择用一个字符串来替代一个单个的字符:

一个新行或者一个回车。

MySQLimport命令常用的选项还有-v显示版本(version),-p提示输入密码(password)等。

3.例子:

导入一个以逗号为分隔符的文件

文件中行的记录格式是这样的:

"1","ORD89876","1DozenRoses","19991226"

我们的任务是要把这个文件里面的数据导入到数据库Meet_A_Geek中的表格Orders中,我们使用这个命令:

bin/MySQLimport–prl–fields-enclosed-by="–fields-terminated-by=,Meet_A_GeekOrders.txt

这个命令可能看起来很不爽,不过当你熟悉了之后,这是非常简单的。

第一部分,

bin/MySQLimport,告诉操作系统你要运行的命令是MySQL/bin目录下的MySQLimport,选项p是要求输入密码,这样就要求你在改动数据库之前输入密码,操作起来会更安全。

我们用了r选项是因为我们想要把表中的唯一关键字与文件记录中有重复唯一关键字的记录替换成文件中的数据。

我们表单中的数据不是最新的,需要用文件中的数据去更新,因而就用r这个选项,替代数据库中已经有的记录。

l选项的作用是在我们插入数据的时候锁住表,这样就阻止了用户在我们更新表的时候对表进行查询或者更改的操作。

批处理是一种非交互式运行MySQL程序的方法,如同您在MySQL中使用的命令一样,你仍然将使用这些命令。

为了实现批处理,您重定向一个文件到MySQL程序中,首先我们需要一个文本文件,这个文本文件包含有与我们在MySQL中输入的命令相同的文本。

比如我们要插入一些数据,使用包含下面文本的文件(文件名为New_Data.sql,当然我们也可以取名为New_Data.txt及任何其他的合法名字,并不一定要以后缀sql结尾):

USEMeet_A_Geek;

INSERTINTOCustomers(Customer_ID,Last_Name)VALUES(NULL,"Block");

INSERTINTOCustomers(Customer_ID,Last_Name)VALUES(NULL,"Newton");

INSERTINTOCustomers(Customer_ID,Last_Name)VALUES(NULL,"Simmons");

注意上面的这些句子的语法都必须是正确的,并且每个句子以分号结束。

上面的USE命令选择数据库,INSERT命令插入数据。

下面我们要把上面的文件导入到数据库中,导入之前要确认数据库已经在运行,即是MySQLd进程(或者说服务,WindowsNT下面称为”服务“,unix下面为”进程“)已经在运行。

然后运行下面的命令:

bin/MySQL–p

接着按提示输入密码,如果上面的文件中的语句没有错误,那么这些数据就被导入到了数据库中。

命令行中使用LOADDATAINFILE从文件中导入数据到数据库:

现在您可能会问自己,"究竟为什么我要输入所有的这些SQL语句到文件中,然后通过程序运行它们呢?

这样看起来好像需要大量的工作。

很好,你这样想很可能就对了。

但是假如你有从所有这些命令中产生的log记录呢?

现在这样就很棒,嗯,大多数数据库都会自动产生数据库中的事件记录的log。

而大部分log都包含有用过的原始的SQL命令。

因此,如果您不能从您现在的数据库中导出数据到新的MySQL数据库中使用,那么您可以使用log和MySQL的批处理特性,来快速且方便地导入您地数据。

当然,这样就省去了打字的麻烦。

LOADDATAINFILE

这是我们要介绍的最后一个导入数据到MySQL数据库中的方法。

这个命令与MySQLimport非常相似,但这个方法可以在MySQL命令行中使用。

也就是说您可以在所有使用API的程序中使用这个命令。

使用这种方法,您就可以在应用程序中导入您想要导入的数据。

使用这个命令之前,MySQLd进程(服务)必须已经在运行。

启动MySQL命令行:

bin/MySQL–p

按提示输入密码,成功进入MySQL命令行之后,输入下面的命令:

USEMeet_A_Geek;

LOADDATAINFILE"/home/mark/data.sql"INTOTABLEOrders;

简单的讲,这样将会把文件data.sql中的内容导入到表Orders中,如MySQLimport工具一样,这个命令也有一些可以选择的参数。

比如您需要把自己的电脑上的数据导入到远程的数据库服务器中,您可以使用下面的命令:

LOADDATALOCALINFILE"C:

\MyDocs\SQL.txt"INTOTABLEOrders;

上面的LOCAL参数表示文件是本地的文件,服务器是您所登陆的服务器。

这样就省去了使用ftp来上传文件到服务器,MySQL替你完成了.

您也可以设置插入语句的优先级,如果您要把它标记为低优先级(LOW_PRIORITY),那么MySQL将会等到没有其他人读这个表的时候,才把插入数据。

可以使用如下的命令:

LOADDATALOW_PRIORITYINFILE"/home/mark/data.sql"INTOTABLEOrders;

您也可以指定是否在插入数据的时候,取代或者忽略文件与数据表中重复的键值。

替代重复的键值的语法:

LOADDATALOW_PRIORITYINFILE"/home/mark/data.sql"REPLACEINTOTABLEOrders;

上面的句子看起来有点笨拙,但却把关键字放在了让您的剖析器可以理解的地方。

下面的一对选项描述了文件的记录格式,这些选项也是在MySQLimport工具中可以用的。

他们在这里看起来有点不同。

首先,要用到FIELDS关键字,如果用到这个关键字,MySQL剖析器希望看到至少有下面的一个选项:

TERMINATEDBYcharacter

ENCLOSEDBYcharacter

ESCAPEDBYcharacter

这些关键字与它们的参数跟MySQLimport中的用法是一样的.The

TERMINATEDBY描述字段的分隔符,默认情况下是tab字符(\t)

ENCLOSEDBY描述的是字段的括起字符。

比方以引号括起每一个字段。

ESCAPEDBY描述的转义字符。

默认的是反些杠(backslash:

\).

下面仍然使用前面的MySQLimport命令的例子,用LOADDATAINFILE语句把同样的文件导入到数据库中:

LOADDATAINFILE"/home/mark/Orders.txt"REPLACEINTOTABLEOrdersFIELDSTERMINATEDBY…,…ENCLOSEDBY…"…;

LOADDATAINFILE语句中有一个MySQLimport工具中没有特点:

LOADDATAINFILE可以按指定的列把文件导入到数据库中。

当我们要把数据的一部分内容导入的时候,这个特点就很重要。

比方说,我们要从Access数据库升级到MySQL数据库的时候,需要加入一些栏目(列/字段/field)到MySQL数据库中,以适应一些额外的需要。

这个时候,我们的Access数据库中的数据仍然是可用的,但是因为这些数据的栏目(field)与MySQL中的不再匹配,因此而无法再使用MySQLimport工具。

尽管如此,我们仍然可以使用LOADDATAINFILE,下面的例子显示了如何向指定的栏目(field)中导入数据:

LOADDATAINFILE"/home/Order.txt"INTOTABLEOrders(Order_Number,

Order_Date,Customer_ID);

如您所见,我们可以指定需要的栏目(fields)。

这些指定的字段依然是以括号括起,由逗号分隔的,如果您遗漏了其中任何一个,MySQL将会提醒您^_^

ImportingDatafromMicrosoftAccess(从Access中导入数据,略)

您可以看到MySQL有很多可以导入数据的方法,然而这些只是数据传输中的一半。

另外的一般是从MySQL数据库中导出数据。

有许多的原因我们需要导出数据。

一个重要的原因是用于备份数据库。

数据的造价常常是昂贵的,需要谨慎处理它们。

经常地备份可以帮助防止宝贵数据地丢失;另外一个原因是,也许您希望导出数据来共享。

在这个信息技术不断成长的世界中,共享数据变得越来越常见。

比方说MacmillanUSA维护护着一个将要出版的书籍的大型数据库。

这个数据库在许多书店之间共享,这样他们就知道哪些书将会很快出版。

医院越来越走向采用无纸病历记录,这样这些病历可以随时跟着你。

世界变得越来越小,信息也被共享得越来越多。

有很多中导出数据得方法,它们都跟导入数据很相似。

因为,毕竟,这些都只是一种透视得方式。

从数据库导出的数据就是从另一端导入的数据。

这里我们并不讨论其他的数据库各种各样的导出数据的方法,您将学会如何用MySQL来实现数据导出。

============================================================================

备份

因为MySQL表作为文件存储,做一个备份是容易的。

为了得到一个一致的备份,在相关的表上做一个LOCKTABLES。

你只需一个读锁定;当你在数据库目录中做文件的一个拷贝时,这允许其他线程继续查询该表。

如果你想要做一个SQL级的备份,你可以SELECTINTOOUTFILE。

备份一个数据库的另一个方法是使用mysqldump程序:

1.为你的数据库做一个完整的备份:

shell>mysqldump--tab=/path/to/some/dir--opt--full

你也可以简单地拷贝所有的表文件(“*.frm”、“*.MYD”和“*.MYI”文件),只要服务器不在更新任何东西。

(frame,data,index)

2.停止mysqld如果它正在运行,然后以--log-update选项启动它。

你将得到一个名为

“hostname.n”形式的日志文件,这里n是随着你每次执行mysqladminrefresh或

mysqladminflush-logs、FLUSHLOGS语句、或重启服务器而递增的一个数字。

这些日志文件向你提供了在你执行mysqldump处后面进行的复制数据库改变的所需

信息。

如果你必须恢复一些东西,尝试首先用myisamchk-r恢复你的表。

这应该处理所有情况的99.9%。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1