编写程序或查询以删除用户及其所有相关记录

时间:2018-05-23 03:41:12

标签: mysql

我有一个查询,我们有一个大型数据库和许多表,但有一点在数据库表中很常见的是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+以上,我都需要检查

1 个答案:

答案 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 |
+------------+--------+