Java MySql批量插入
我想在MySql数据库中插入一些4K行。我不想触发4k“插入”查询。是否有任何方法可以只启动一个insert查询来存储数据库中的4k行 我在互联网上搜索,到处都发现用户正在从文件中批量插入数据库 在我的例子中,我的内存中有数据,我不想先将数据写入文件以进行大容量插入。如果我这样做,那么我将在程序中增加延迟。您可以编写一个查询,在对数据库的一次调用中进行多次插入:Java MySql批量插入,java,mysql,bulkinsert,Java,Mysql,Bulkinsert,我想在MySql数据库中插入一些4K行。我不想触发4k“插入”查询。是否有任何方法可以只启动一个insert查询来存储数据库中的4k行 我在互联网上搜索,到处都发现用户正在从文件中批量插入数据库 在我的例子中,我的内存中有数据,我不想先将数据写入文件以进行大容量插入。如果我这样做,那么我将在程序中增加延迟。您可以编写一个查询,在对数据库的一次调用中进行多次插入: insert into your_table (field1, field2, field3) values (value1_1
insert into your_table (field1, field2, field3)
values
(value1_1, value1_2, value1_3),
(value2_1, value2_2, value2_3),
(value3_1, value3_2, value3_3)
在这里,根据我给出的示例,这个查询将在表中插入三行。MySQL的
加载数据
命令可能对您有用:
参考Pascal的建议,除非您的命令超过max\u allowed\u packet
,否则您应该能够执行此查询。在许多情况下,最好创建几个较小的插入,每个插入都有1000行
另外,
setAutoCommit(false)
,并调用conn.commit()
在executeBatch()
之后执行,以最大限度地减少提交次数。在mySql中,可以使用加载数据填充
LOAD DATA INFILE 'C:\MyTextFile'
INTO TABLE myDatabase.MyTable
FIELDS TERMINATED BY ','
在数据库中1分钟内插入超过7000000条记录的大容量数据(带计算的超高速查询)
RRP和RRP_nl和RRP_bl不在csv中,但我们经过计算并在插入之后进行了计算。我认为db对查询的长度施加了一些限制。在3行的情况下,它可以工作,但在4K行的情况下,我不认为它可以工作。当我尝试插入1000行(8 x int,2 x string)时,它对我有效。但当我尝试2000行时,我得到了一个“MySQL服务器已经消失”错误。为了解决这个问题,我将尝试像James C建议的那样一次插入1000行。@Pascal是原子的吗?如果数据库中途崩溃,是否可能只插入三行中的两行?@YatendraGoel:您仍然可以将单元素插入集划分为n-(4K/n)-元素插入。
mysqli_query($cons, '
LOAD DATA LOCAL INFILE "'.$file.'"
INTO TABLE tablename
FIELDS TERMINATED by \',\'
LINES TERMINATED BY \'\n\'
IGNORE 1 LINES
(isbn10,isbn13,price,discount,free_stock,report,report_date)
SET RRP = IF(discount = 0.00,price-price * 45/100,IF(discount = 0.01,price,IF(discount != 0.00,price-price * discount/100,@RRP))),
RRP_nl = RRP * 1.44 + 8,
RRP_bl = RRP * 1.44 + 8,
ID = NULL
')or die(mysqli_error());
$affected = (int) (mysqli_affected_rows($cons))-1;
$log->lwrite('Inventory.CSV to database:'. $affected.' record inserted successfully.');