如何获取“插入忽略stament”中插入行的数量

问题描述:

我正在进行批量插入并在插入"ignore statement"的数据库中插入50万个标记。在50万个令牌中可以有重复的令牌。 因此,如果我在插入忽略语句的数据库中插入50万个标记,那么不能保证所有标记都会因为重复的标记而插入到数据库中。如何获取“插入忽略stament”中插入行的数量

做完插入后,我想知道有多少令牌插入到数据库中。有些人建议使用affected_rows列来计算插入(受影响)的行数。但affected_rows不会给出当前sql语句的输出,它会给出最后一个sql语句的输出。

请告诉我使用insert ignore statment来获取插入行数的最佳方法。

+0

您是否使用了50万个INSERT语句或1个带有50万个值的INSERT语句? –

+0

1个插入有50万行... – user2274074

select row_count();只是在insert语句后获取插入的行数。

如:

insert ignore into tbl(col1) values (1),(2); select row_count(); 

做一个简单的SQL插入忽略将与affected_rows工作。不知道这将是怎样的表现明智,因为它是0.5密尔行进入。

无论如何,这是我尝试过的一个解决方案,可以在INSERT中使用4个值。

<?php 
$mysqli = new mysqli('127.0.0.1','root','','test'); 

if (mysqli_connect_errno()) { 
printf("Connect failed: %s\n", mysqli_connect_error()); 
exit(); 
} 

$sql = "INSERT IGNORE INTO test1 (Name, Attribute, Val) VALUES ('ai', 'blue', '1j'),('ai1', 'white', '2j'),('ai2', 'black', '3j'),('ai1', 'green', '4j')"; 
$insert = $mysqli->query($sql); 
printf ($mysqli->affected_rows); 
?> 
+0

如果来自另一个进程(请求)的另一个插入在“printf($ mysqli-> affected_rows)”语句之前执行,那么它会给出此插入的计数,而不是您提到的那个在你的例子中。 – user2274074