天天看点

MySQL数据导入导出方法与工具mysqlimport

MySQL数据导入导出方法与工具mysqlimport<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

1.mysqlimport的语法介绍:

 mysqlimport Meet_A_Geek Customers.txt

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

 mysqlimport Meet_A_Geek Cus.to.mers.txt

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

2.mysqlimport的常用选项介绍:

选项 功能

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

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

 -i or --ignore mysqlimport跳过或者忽略那些有相同唯一

关键字的行, 导入文件中的数据将被忽略。

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

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

 --fields-terminated- by=char 指定各个数据的值之间的分隔符,在句号分隔的文件中, 分隔符是句号。您可以用此选项指定数据之间的分隔符。 默认的分隔符是跳格符(Tab)

 --lines-terminated- by=str 此选项指定文本文件中行与行之间数据的分隔字符串 或者字符。 默认的情况下mysqlimport以newline为行分隔符。 您可以选择用一个字符串来替代一个单个的字符: 一个新行或者一个回车。

3.例子:导入一个以逗号为分隔符的文件

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

 "1", "ORD89876", "1 Dozen Roses", "19991226"

 bin/mysqlimport –prl –fields-enclosed-by=" –fields-terminated-by=, Meet_A_Geek Orders.txt

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

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

 USE Meet_A_Geek;

 INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, "Block");

 INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, "Newton");

 INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, "Simmons");

[1] [2] [3] 下一页  

然后运行下面的命令:

 bin/mysql –p 

LOAD DATA INFILE

启动mysql命令行:

 bin/mysql –p

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

 LOAD DATA INFILE "/home/mark/data.sql" INTO TABLE Orders;

 LOAD DATA LOCAL INFILE "C:\MyDocs\SQL.txt" INTO TABLE Orders;

 LOAD DATA LOW_PRIORITY INFILE "/home/mark/data.sql" INTO TABLE Orders;

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

 LOAD DATA LOW_PRIORITY INFILE "/home/mark/data.sql" REPLACE INTO TABLE Orders;

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

下面的一对选项描述了文件的记录格式,这些选项也是在mysqlimport工具中可以用的。他们在这里看起来有点不同。首先,要用到FIELDS关键字,如果用到这个关键字,MySQL剖析器希望看到至少有下面的一个选项:

 TERMINATED BY character

 ENCLOSED BY character

 ESCAPED BY character

这些关键字与它们的参数跟mysqlimport中的用法是一样的. The TERMINATED BY 描述字段的分隔符,默认情况下是tab字符(\t)

 ENCLOSED BY描述的是字段的括起字符。比方以引号括起每一个字段。

 ESCAPED BY 描述的转义字符。默认的是反些杠(backslash:\ ).

 LOAD DATA INFILE "/home/mark/Orders.txt" REPLACE INTO TABLE Orders FIELDS TERMINATED BY ',' ENCLOSED BY '"';

LOAD DATA INFILE语句中有一个mysqlimport工具中没有特点:

 LOAD DATA INFILE "/home/Order.txt" INTO TABLE Orders(Order_Number, Order_Date, Customer_ID);

如您所见,我们可以指定需要的栏目(fields)。这些指定的字段依然是以括号括起,由逗号分隔的,如果您遗漏了其中任何一个,MySQL将会提醒您

导出数据的方法:Methods of Exporting Data

上一页  [1] [2] [3] 下一页  

使用mysqldump:

(mysqldump命令位于mysql/bin/目录中)

 bin/mysqldump –p Meet_A_Geek > MeetAGeek_Dump_File.txt

 bin/mysqldump –p Meet_A_Geek Orders >MeetAGeek_Orders.txt

这个非常的灵活,您甚至可以使用WHERE从句来选择您需要的记录导出到文件中。要达到这样的目的,可以使用类似于下面的命令:

 bin/mysqldump –p –where="Order_ID > 2000" Meet_A_Geek Orders > Special_Dump.txt

mysqldump工具有大量的选项,部分选项如下:

选项/Option 作用/Action Performed

 --add-drop-table

 这个选项将会在每一个表的前面加上DROP TABLE IF

--add-locks

 这个选项会在INSERT语句中捆上一个LOCK TABLE和UNLOCK

-c or - complete_insert

 --delayed-insert 在INSERT命令中加入DELAY选项

 -f or -force 使用这个选项,即使有错误发生,仍然继续导出

 --full 这个选项把附加信息也加到CREATE TABLE的语句中

 -t or -no-create- info

 -d or -no-data 这个选项使的mysqldump命令不创建INSERT语句。

 在您只需要DDL语句时,可以使用这个选项。

 --opt 此选项将打开所有会提高文件导出速度和创造一个可以更快导入的文件的选项。 //from www.w3sky.com

-q or -quick 这个选项使得MySQL不会把整个导出的内容读入内存再执行导出,而是在读到的时候就写入导文件中。

 -T path or -tab = path 这个选项将会创建两个文件,一个文件包含DDL语句或者表创建语句,另一个文件包含数据。DDL文件被命名为table_name.sql,数据文件被命名为table_name.txt.路径名是存放这两个文件的目录。目录必须已经存在,并且命令的使用者有对文件的特权。

 -w "WHERE Clause" or -where = "Where clause "

 如前面所讲的,您可以使用这一选项来过筛选将要放到 导出文件的数据。

 bin/mysqldump –p –where "Order_Date >='2000-01-01'"

 –tab = /home/mark –no-create-info –fields-terminated-by=, Meet_A_Geek Orders

 这将会得到您想要的结果。

schema:模式

SELECT INTO OUTFILE :

 如果您觉得mysqldump工具不够酷,就使用SELECT INTO OUTFILE吧, MySQL同样提供一个跟LOAD DATA INFILE命令有相反作用的命令,这就是SELECT INTO OUTFILE 命令,这两个命令有很多的相似之处。首先,它们有所有的选项几乎相同。现在您需要完成前面用mysqldump完成的功能,可以依照下面的步骤进行操作:

 1. 确保mysqld进程(服务)已经在运行

 2. cd /usr/local/mysql

 3. bin/mysqladmin ping ;// 如果这个句子通不过,可以用这个:mysqladmin -u root -p ping mysqladmin ping用于检测mysqld的状态,is alive说明正在运行,出错则可能需要用户名和密码。

 4. 启动MySQL 监听程序.

 6. 在命令行中,输入一下命令:

SELECT * INTO OUTFILE '/home/mark/Orders.txt'

 FIELDS

 TERMINATED BY = ','

 FROM Orders

 WHERE Order_Date >= '2000-01-01'

在你按了Return(回车)之后,文件就创建了。这个句子就像一个规则的SELECT语句,只是把想屏幕的输出重定向到了文件中。这意味这您可以使用JOIN来实现多表的高级查询。这个特点也可以被用作一个报表产生器。

比方说,您可以组合这一章中讨论的方法来产生一个非常有趣的查询,试试这个:

在mysql目录建立一个名为Report_G.rpt 的文本文件,加入下面的行:

USE Meet_A_Geek;

INSERT INTO Customers (Customer_ID, Last_Name, First_Name)

VALUES (NULL, "Kinnard", "Vicky");

VALUES (NULL, "Kinnard", "Steven");

VALUES (NULL, "Brown", "Sam");

SELECT Last_Name INTO OUTFILE '/home/mark/Report.rpt'

FROM Customers WHERE Customer_ID > 1; 

然后确认 mysql进程在运行,并且您在mysql目录中, 输入下面的命令:

bin/mysql 

翻译声明: 本文内容来自Sam's Teach Yourself MySQL in 21 Days一书的部分内容,by Mark Maslakowski 英文原文版权属原作者所有,中文的部分翻译有略有增删;原书讲的过于清楚的地方有删,讲的不清楚的地方有增;如果有翻译的不妥或者不正确的地方,请指正。

上一页  [1] [2] [3]