批处理导入文件,从sql文件导入数据到数据库中 ,批处理是一种非交互式运行mysql程序的方法,如同您在mysql中使用的命令同样,你仍然将使用这些命令。 为了实现批处理,您重定向一个文件到mysql程序中,首先咱们须要一个文本文件,这个文本文件包含有与咱们在mysql中输入的命令相同的文本。 好比咱们要插入一些数据,使用包含下面文本的文件(文件名为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"); 注意上面的这些句子的语法都必须是正确的,而且每一个句子以分号结束。 上面的USE命令选择数据库,INSERT命令插入数据。 下面咱们要把上面的文件导入到数据库中,导入以前要确认数据库已经在运行,便是mysqld进程(或者说服务,Windows NT下面称为”服务“,unix下面为”进程“)已经在运行。 而后运行下面的命令: bin/mysql ?p < /home/mark/New_Data.sql 接着按提示输入密码,若是上面的文件中的语句没有错误,那么这些数据就被导入到了数据库中。 命令行中使用LOAD DATA INFILE 从文件中导入数据到数据库: 现 在您可能会问本身,"究竟为何我要输入全部的这些SQL语句到文件中,而后经过程序运行它们呢?” 这样看起来好像须要大量的工做。很好,你这样想极可能就对了。可是假如你有从全部这些命令中产生的log记录呢?如今这样就很棒,嗯,大多数数据库都会自 动产生数据库中的事件记录的log。而大部分log都包含有用过的原始的SQL命令。所以,若是您不能从您如今的数据库中导出数据到新的mysql数据库 中使用,那么您可使用log和mysql的批处理特性,来快速且方便地导入您地数据。固然,这样就省去了打字的麻烦。 LOAD DATA INFILE 这 是咱们要介绍的最后一个导入数据到MySQL数据库中的方法。这个命令与mysqlimport很是类似,但这个方法能够在mysql命令行中使用。也就 是说您能够在全部使用API的程序中使用这个命令。使用这种方法,您就能够在应用程序中导入您想要导入的数据。 使用这个命令以前,mysqld进程(服务)必须已经在运行。 启动mysql命令行: bin/mysql ?p 按提示输入密码,成功进入mysql命令行以后,输入下面的命令: USE Meet_A_Geek; LOAD DATA INFILE "/home/mark/data.sql" INTO TABLE Orders; 简单的讲,这样将会把文件data.sql中的内容导入到表Orders中,如mysqlimport工具同样,这个命令也有一些能够选择的参数。好比您须要把本身的电脑上的数据导入到远程的数据库服务器中,您可使用下面的命令: LOAD DATA LOCAL INFILE "C:\MyDocs\SQL.txt" INTO TABLE Orders; 上 面的LOCAL参数表示文件是本地的文件,服务器是您所登录的服务器。 这样就省去了使用ftp来上传文件到服务器,MySQL替你完成了. 您也能够设置插入语句的优先级,若是您要把它标记为低优先级(LOW_PRIORITY),那么MySQL将会等到没有其余人读这个表的时候,才把插入数 据。可使用以下的命令: 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; 上面的句子看起来有点笨拙,但却把关键字放在了让您的剖析器能够理解的地方。 下面的一对选项描述了文件的记录格式,这些选项也是在mysqlimport工具中能够用的。他们在这里看起来有点不一样。首先,要用到FIELDS关键字,若是用到这个关键字,MySQL剖析器但愿看到至少有下面的一个选项: TERMINATED BY character ENCLOSED BY character ESCAPED BY character 这些关键字与它们的参数跟mysqlimport中的用法是同样的. The TERMINATED BY 描述字段的分隔符,默认状况下是tab字符(\t) ENCLOSED BY描述的是字段的括起字符。比方以引号括起每个字段。 ESCAPED BY 描述的转义字符。默认的是反些杠(backslash:\ ). 下面仍然使用前面的mysqlimport命令的例子,用LOAD DATA INFILE语句把一样的文件导入到数据库中: LOAD DATA INFILE "/home/mark/Orders.txt" REPLACE INTO TABLE Orders FIELDS TERMINATED BY ’,’ ENCLOSED BY ’"’; LOAD DATA INFILE语句中有一个mysqlimport工具中没有特色: LOAD DATA INFILE 能够按指定的列把文件导入到数据库中。 当咱们要把数据的一部份内容导入的时候,这个特色就很重要。比方说,咱们要从Access数据库升级到MySQL数据库的时候,须要加入一些栏目(列/字 段/field)到MySQL数据库中,以适应一些额外的须要。 这个时候,咱们的Access数据库中的数据仍然是可用的,可是由于这 些数据的栏目(field)与MySQL中的再也不匹配,所以而没法再使用mysqlimport工具。尽管如此,咱们仍然可使用LOAD DATA INFILE,下面的例子显示了如何向指定的栏目(field)中导入数据: LOAD DATA INFILE "/home/Order.txt" INTO TABLE Orders(Order_Number, Order_Date, Customer_ID); 如您所见,咱们能够指定须要的栏目(fields)。这些指定的字段依然是以括号括起,由逗号分隔的,若是您遗漏了其中任何一个,MySQL将会提醒您^_^