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

问题描述 投票:1回答:2

我有一个问题如何将.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 ;

好像很好:)

谢谢 ;)

mysql
2个回答
1
投票

使用以下方式导入文件

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

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

您可以删除fk_pcg_version = 'SYSCOHADA'中的所有行,并再次导入您的文件更正。


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.