我有一个问题如何将.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 ;
看起来不错:)
谢谢;)
答案 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语句。 一旦删除,它将有效地将行追加到现有记录。 也许这会帮助别人。