从.sql文件中将行添加到mysql表中

时间:2016-07-12 07:33:32

标签: mysql

我有一个问题如何将.sql文件插入已包含大量数据的MySQL表中?

我的.sql文件看起来像(1200行):

--
-- Descriptif plan comptable SYSCOHADA (utf-8)
--

INSERT INTO llx_accounting_system (rowid, pcg_version, fk_pays, label, active) VALUES (10,'SYSCOHADA', 49, 'Plan comptable Ouest-Africain', 1);

INSERT INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15000,'SYSCOHADA','CAPITAUX','XXXXXX','1',0,"Capital",'1');
INSERT INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15001,'SYSCOHADA','CAPITAUX','XXXXXX','101',15000,"Capital social",'1');
INSERT INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15002,'SYSCOHADA','CAPITAUX','XXXXXX','1011',15001,"Capital souscrit, non appele);

我的MySQL表格如下:

mysql> describe llx_accounting_account ;
+----------------+--------------+------+-----+-------------------+-----------------------------+
| Field          | Type         | Null | Key | Default           | Extra                       |
+----------------+--------------+------+-----+-------------------+-----------------------------+
| rowid          | int(11)      | NO   | PRI | NULL              | auto_increment              |
| entity         | int(11)      | NO   |     | 1                 |                             |
| datec          | datetime     | YES  |     | NULL              |                             |
| tms            | timestamp    | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| fk_pcg_version | varchar(32)  | NO   | MUL | NULL              |                             |
| pcg_type       | varchar(20)  | NO   |     | NULL              |                             |
| pcg_subtype    | varchar(20)  | NO   |     | NULL              |                             |
| account_number | varchar(32)  | NO   | MUL | NULL              |                             |
| account_parent | varchar(32)  | YES  |     | NULL              |                             |
| label          | varchar(255) | NO   |     | NULL              |                             |
| fk_user_author | int(11)      | YES  |     | NULL              |                             |
| fk_user_modif  | int(11)      | YES  |     | NULL              |                             |
| active         | tinyint(4)   | NO   |     | 1                 |                             |
+----------------+--------------+------+-----+-------------------+-----------------------------+
13 rows in set (0.00 sec)

我的MySQL表不为空。已有数据,我想在我的数据表之后添加我的.sql文件。

我没有执行此命令,因为我认为这是假的:

LOAD DATA LOCAL INFILE 'data_3.9.sql'
INTO TABLE llx_accounting_account
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n'

你有解决方案吗?

谢谢:)

----------------------------------------------- -----------------------------------

解决方案:

通过@RakeshKumar和@PaulF的评论,我找到了解决问题的方法:

1)我删除了fk_pcg_version = 'SYSCOHADA'

所有的行
delete from llx_accounting_account where fk_pcg_version = 'SYSCOHADA' ;

2)我导入了.sql文件:

mysql -u root -p****** dolibarr < data_3.9.sql

3)我修改了一条信息,因为account_number是1而不是10 rowid = 15000

UPDATE llx_accounting_account SET account_number = 10  WHERE rowid=15000 ;

看起来不错:)

谢谢;)

2 个答案:

答案 0 :(得分:1)

使用以下方式导入文件

mysql -u username -p'password' dbname < filename.sql

您的导入无效,因为您的表中已有相同的旧SYSCOHADA行。

您可以删除fk_pcg_version = 'SYSCOHADA'的所有行,然后重新导入文件更正。

答案 1 :(得分:-1)

从从mysqldump表输出到file命令创建的SQL文件导入数据时,我遇到了相同的错误。原因是该SQL文件在文件的开头具有DROP TABLE IF EXISTS和CREATE TABLE语句。 一旦删除,它将有效地将行追加到现有记录。 也许这会帮助别人。