Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:在不使用多个语句的情况下,从一个表中删除不在另一个表中的内容_Mysql - Fatal编程技术网

MySQL:在不使用多个语句的情况下,从一个表中删除不在另一个表中的内容

MySQL:在不使用多个语句的情况下,从一个表中删除不在另一个表中的内容,mysql,Mysql,我试图通过执行以下命令清理MySQL中的7.5GiB表: DELETE FROM wp_commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments); 这两个字段之间没有外键。由于(第二个?两个?)表的大小,尝试执行此操作会导致以下错误: 多语句事务需要大于“max\u binlog\u cache\u size” 存储字节数;请增加此mysqld变量,然后重试 这个表太大了,我无法切实提高binlog\u

我试图通过执行以下命令清理MySQL中的7.5GiB表:

DELETE FROM wp_commentmeta WHERE comment_id NOT IN  (SELECT comment_id FROM wp_comments);
这两个字段之间没有外键。由于(第二个?两个?)表的大小,尝试执行此操作会导致以下错误:

多语句事务需要大于“max\u binlog\u cache\u size” 存储字节数;请增加此mysqld变量,然后重试

这个表太大了,我无法切实提高binlog\u cache\u大小来满足这个请求。除了将这两个表转储到磁盘并使用解析器脱机区分它们的内容之外,还有什么方法可以重组查询以更高效地执行我需要做的事情吗

我可以做的一些事情(但我希望选择正确/明智的选项):

  • 在两个字段之间创建一个带有外键约束的新表并插入其中,然后删除旧表并重命名新表
  • 使用MySQL派生/虚拟表创建视图,我可以导出然后重新导入
  • 转储这两个表并比较w/a解析器以生成要删除的ID列表
欢迎您的建议

试试这个:

DELETE wcm
FROM wp_commentmeta wcm
LEFT JOIN wp_comments wc ON wc.comment_id = wcm.comment_id
WHERE wc.comment_id IS NULL;

... 并添加一个外键约束,这样就不会再发生这种情况。谢谢,这很有效。事实上,我最终用管道
mysqldumpsed | tail-n+22 | mysql-f
以避免内存消耗(以慢得多的进程为代价),但这是可行的。