MySQL 多查询/事务限制
MySQL multiquery / transaction limitations
我想弄清楚 MySQL 是否足以满足我的用例。我尝试将 100 000 行插入我的本地 mysql 服务器,一切顺利。我看到数据库开始填充数据。
然后我 运行 再次向 Google 云 SQL 插入相同的脚本。一切似乎也很好,但由于某种原因,DB 停止在 67667 条目之后插入条目,即使 DB 的响应是插入成功。
MySQL 是否有某种限制,或者什么可能导致这种行为?
我的测试脚本:
// Create connection
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$conn->select_db($database);
$insertData = '';
for ($i = 0; $i < 100000; $i++) {
$insertData .= "INSERT INTO table (isin) VALUES ('".uniqid()."');";
}
if ($conn->multi_query($insertData) === true) {
echo "New records created successfully";
} else {
echo "Error: <br>" . $conn->error;
}
$conn->close();
我的测试 table 只有两列,id
和 isin
数字。
尝试使用 mysql 批量插入,例如
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
在循环中构建这部分,即 (1,2,3),(4,5,6),(7,8,9),然后仅使用一个 INSERT 查询
试试这个方法:
$val = "";
for ($i = 0; $i < 100000; $i++) {
$val .= "('".uniqid()."'),";
}
$val = rtrim($val,",");
$insertData = "INSERT INTO table (isin) values $val";
$conn->query($insertData);
我想弄清楚 MySQL 是否足以满足我的用例。我尝试将 100 000 行插入我的本地 mysql 服务器,一切顺利。我看到数据库开始填充数据。
然后我 运行 再次向 Google 云 SQL 插入相同的脚本。一切似乎也很好,但由于某种原因,DB 停止在 67667 条目之后插入条目,即使 DB 的响应是插入成功。
MySQL 是否有某种限制,或者什么可能导致这种行为?
我的测试脚本:
// Create connection
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$conn->select_db($database);
$insertData = '';
for ($i = 0; $i < 100000; $i++) {
$insertData .= "INSERT INTO table (isin) VALUES ('".uniqid()."');";
}
if ($conn->multi_query($insertData) === true) {
echo "New records created successfully";
} else {
echo "Error: <br>" . $conn->error;
}
$conn->close();
我的测试 table 只有两列,id
和 isin
数字。
尝试使用 mysql 批量插入,例如
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
在循环中构建这部分,即 (1,2,3),(4,5,6),(7,8,9),然后仅使用一个 INSERT 查询
试试这个方法:
$val = "";
for ($i = 0; $i < 100000; $i++) {
$val .= "('".uniqid()."'),";
}
$val = rtrim($val,",");
$insertData = "INSERT INTO table (isin) values $val";
$conn->query($insertData);