我有脚本在数据库中创建相同的数据。看上去:
START TRANSACTION;
INSERT INTO table (data);
INSERT INTO table (data);
INSERT INTO table (data);
...
COMMIT;剧本运行了大约30分钟。但是,当它工作时,该表被锁定,以供其他插入。在脚本结束之前,我无法在另一个进程中插入任何行。有必要吗?我想用交易,但我不能锁整张桌子。有什么办法吗?
发布于 2016-10-13 21:27:54
你能做以下事情吗?
START TRANSACTION;
INSERT INTO table (data);
COMMIT;
START TRANSACTION;
INSERT INTO table (data);
COMMIT;
...
START TRANSACTION;
INSERT INTO table (data);
COMMIT;不是最优雅的,但它应该根据你描述的情况来解决你的问题。
如果您需要整个项目是一个事务,那么最好的方法是:
INSERT INTO tmpTableA (dataX);
INSERT INTO tmpTableB (dataY);
INSERT INTO tmpTableC (dataZ);
...
' Do all the "building / processing above using temp tables either in memory or on disc, and then only when all the "heavy lifting" is done; update/insert the data into your tables.
...
START TRANSACTION;
INSERT INTO tableA (tmpTableA);
UPDATE tableB.foo = tmpTableB.fee WHERE BlahBlobBlah;
INSERT INTO tableC (tmpTableC);
COMMIT;您希望延迟事务的启动,直到所有处理完成为止。
发布于 2016-10-13 21:42:39
您应该创建一个临时表: table_temp将所有数据插入到table_temp中,准备就绪时可以将所有临时数据插入到最终表中:
START TRANSACTION;
INSERT INTO table_temp (data);
INSERT INTO table_temp (data);
INSERT INTO table_temp (data);
insert into table
select * from table_temp;
commit;https://stackoverflow.com/questions/40031264
复制相似问题