我有一个问题如何将.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 -u username -p'password' dbname < filename.sql
您的导入无效,因为您的表中已有相同的旧SYSCOHADA
行。
您可以删除fk_pcg_version = 'SYSCOHADA'
中的所有行,并再次导入您的文件更正。
我从将mysqldump表输出创建的SQL文件中的数据导入到file命令时遇到了同样的错误。原因是SQL文件在文件的开头有DROP TABLE IF EXISTS和CREATE TABLE语句。删除后,它会有效地将行附加到现有记录中。也许这会有助于其他人。