可以这么说,我试图杀死多只鸟。我正在使用Windows命令行mysql.exe加载从我正在使用的另一个程序调用的本地infile,我发现还有3个其他表需要更新,并且它们使用主表中的自动递增PK。表名是case_info,缓解和处理。 case_info中的字段名称是case_id,client_id,sales_data,expenses_data和income_data。缓解措施中的字段名称是mit_id,client_id和mitigation_data。处理中的字段名称为proc_id,client_id和processing_data。我传递给cli的命令
mysql.exe -uUSER -pSOMEPASSWORD -hEXAMPLE.COM TABLENAME -e \"load data local infile '" +leads+ "'
into table clients
fields terminated by ','
LINES TERMINATED BY '\r\n'
(first_name,address,city,state,zip,saledate,file_id,last_updated,last_updated_by);"+ chr(34)`
client_id是AI,PK,所以我需要在上面列出的3个表上运行插入语句,以在执行此操作的同时将文本插入所有3个表的* _data字段和client_id字段中加载每条记录后,加载数据本地文件。我不确定这是否可能,是否有人可以帮助我制作一次查询或在加载后运行以从客户端表中获取client_id的查询,而在另一方找不到该查询表格要更新并插入数据?对于要从主应用程序启动和更新的每条记录,要加载到其他表中的数据都是相同的。
在从文件加载记录之前开始事务。然后,您可以保存旧的MAX(client_id)
,并将其用于查询中,以查找在主表中创建的所有新ID,并将其添加到其他表中。
mysql ... -e \"
START TRANSACTION;
SET @maxid = (select max(client_id) from clients;
load data local infile '" +leads+ "'
into table clients
fields terminated by ','
LINES TERMINATED BY '\r\n'
(first_name,address,city,state,zip,saledate,file_id,last_updated,last_updated_by);
INSERT INTO case_info (client_id)
SELECT client_id FROM client
WHERE client_id > @maxid;
INSERT INTO mitigation (client_id)
SELECT client_id FROM client
WHERE client_id > @maxid;
INSERT INTO processing (client_id)
SELECT client_id FROM client
WHERE client_id > @maxid;
COMMIT
"+ chr(34)`
其他三个INSERT
查询假定其他列都有适当的默认值-您可以根据需要为它们添加显式值。