我有一个查询,我们有一个大型数据库和许多表,但有一点在数据库表中很常见的是rfcID
的用法。因此,我们希望删除过去6个月内一直处于非活动状态的所有用户,并且他们只是免费会员资格,用于定义我们的paypal表中的成员资格以及成员资格为1的列字段。
我想使用这两个操作,因为我们的数据库中有一些记录,其中成员资格为1,即使用户是付费成员也是由于某些错误。我尝试编写一些脚本,但这可能会超时并挂起我的mysql服务器
我的代码是这样的DELETE FROM `users`, `comments`
USING `users`,`comments`
WHERE `comments`.`rfcID` = `users`.`id` AND users.rfcID NOT IN (select rfcID from paypal);
我有30+以上,我都需要检查
答案 0 :(得分:0)
在您要删除与其相关的事物及其所有内容的情况下,而不是手动执行此操作,您将在架构中使用on delete cascade
referential action。
create table users (
id integer primary key auto_increment
);
create table comments (
id integer primary key auto_increment,
user integer not null,
foreign key(user) references users(id) on delete cascade,
comment text not null
);
现在当您delete from users where id = ?
时,与该用户相关的任何评论也将被删除。
请确保您使用的是InnoDB表并且foreign_key_checks
已启用。
mysql> show variables like 'foreign_key_checks'; +--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| foreign_key_checks | ON |
+--------------------+-------+
mysql> select table_name, engine from information_schema.TABLES where table_name in ('users','comments');
+------------+--------+
| table_name | engine |
+------------+--------+
| comments | InnoDB |
| users | InnoDB |
+------------+--------+