mysql - 在SQL错误1206中插入一个巨大的表

标签 mysql database

我在将数据从一个表插入到另一个表时遇到问题,这是一个 MySQL 数据库。必须导入的表大约 4gb 大。我正在使用此查询导入数据。

insert into table1(column1, column 2)
select table2.column1, table2.column2
from table2 left join table1 on table2.column1 = table1.column1
where table1.column1 is null

我收到此错误:错误代码 1206:锁总数超过锁表大小。

增加缓冲池大小不是一个选项,我无权这样做。 SQL 查询适用于较小的表。

有人能解决我的问题吗?

解决方法:

 insert IGNORE into table1(column1, column 2)
 select table2.column1, table2.column2
 from table2;

谢谢 Tom Melly 的回答。 感谢 Stefan Winkler 的帮助。

最佳答案

column1 是否有唯一索引?

如果是这样,您可以在插入中添加忽略选项,这意味着您可以跳过左连接:

insert IGNORE into table1(column1, column 2)
select table2.column1, table2.column2
from table2;

这将跳过任何会造成键冲突的插入,但查询仍会运行(如果没有“忽略”,它将在第一次键冲突时失败)。

关于mysql - 在SQL错误1206中插入一个巨大的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20375710/

相关文章:

sql-server - 按 Clustered Columnstore Index 中的索引排序

sql-server-2005 - 如何在 SQL 中使用 CASE,显示语法错误

php - 在数据库表中只标记一个条目的可能性

mysql - 比较和更新百万行的最快方法

php - 从mySQL表中获取信息

mysql - javax.persistence.EntityExistsException : a different object with the same identifier value was already associated with the session 异常

c# - 如果在 C# 中按名称搜索,如何从表中选择行?

MySQL 创建高级查询

java - 使用 JSON 和 PHP 从 Mysql DB 获取数据时出错

sql-server - 未使用的空间分配给 SQL Server 中的表