2012-03-08 149 views
1

我有一个单一表的MySQL数据库,其中包括一个自动增量ID,一个字符串和两个数字。我想用很多字符串填充这个数据库,来自一个文本文件,所有的数字最初重置为0.如何填充数据库?

有没有办法快速做到这一点?我想创建一个脚本来生成许多INSERT语句,但这似乎有点原始和缓慢。尤其是因为mysql在远程站点上。

+2

您可以请发布您想要导入的文本文件的示例行吗? – rkosegi 2012-03-08 16:54:44

回答

7

是 - 使用LOAD DATA INFILEdocs are here例子:

LOAD DATA INFILE 'csvfile' 
INTO TABLE table 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
IGNORE 0 LINES 
(cola, colb, colc) 
SET cold = 0, 
cole = 0; 

通知的set线 - 在这里你设置的默认值。

根据你的字段分隔符更改线路FIELDS TERMINATED BY ','

+0

谢谢!当我尝试这样做时,我得到:LOAD DATA INFILE'bundles/PACKAGE1.TXT'INTO TABLE textrating FIELDS TERMINATED BY'\ t'LINES TERMINATED BY'\ n'IGNORE 0 LINES(textline); 错误1045(28000):访问拒绝用户名...等 - 我知道我的权限设置,以便我可以添加尽可能多的数据,我想要的。是否需要为LOAD DATA INFILE设置特殊权限?我会注意到secure_file_priv在这里是NULL,并且我试图从本地文件加载数据到远程服务器。 – kloop 2012-03-08 17:18:30

+0

我也会注意到“SHOW GRANTS”表示我拥有所有权限。 – kloop 2012-03-08 17:20:00

+0

在mysql中。用户表确保FILE_PRIV ='Y'为您的用户 – 2012-03-08 17:23:24

1

如果你有访问服务器的文件系统,你可以利用LOAD DATA

如果你不想与语法,最简单的方法打(如果windows)是使用HeidiSQL

它有友好的巫师为此目的。

也许我可以帮助你正确的语法,如果你从文本文件发布样本行。

1

其他答案只回答你的一半问题。对于另一半(归零数字列):

或者:

  1. 设置你的数列的默认值0
  2. 在你的文本文件,直接删除的数值,
  3. 这将导致该字段被LOAD INFILE读取为空,并且将分配defauly值,您将其设置为0.

或者:

  1. 一旦你在表中的数据,发出MySQL命令为零的领域里,如

    UPDATE table SET first_numeric_column_name = 0, second_numeric_column_name = 0 WHERE 1;

并总结了一切,用LOAD DATA INFILE

+0

感谢@Martin,你打败了我! – msanford 2012-03-08 16:56:39

+1

也突出显示了你的代码:-) – ManseUK 2012-03-08 16:57:41

+1

@ManseUK我总是*突出显示我的代码。必须是DayQuil ... – msanford 2012-03-08 17:01:18