mysql - mysql 数据库上的 While 循环

标签 mysql

首先,对于我的菜鸟问题感到抱歉,因为我很确定它是。

我在 Ubuntu 14.04 上使用 MySQL 5.5.53。

我正在尝试从数据库中删除用户名以字母“z”开头的所有用户。但我还需要删除他们的权限并将他们也从他们所属的组中删除。

这些表之间唯一的共同点是用户表中的 user_id。

下面,这是我尝试用来删除用户的方法。一旦它适用于它,它就会像其他表的 abc 一样容易。

不幸的是,这不起作用:

我创建一个文件“clearusers.sql”:

CREATE PROCEDURE clearusers()
BEGIN
        SELECT @count := COUNT(*) FROM db_user WHERE username like 'z%';
        WHILE @count > 0 DO
                SELECT @user_id := user_id FROM db_user WHERE username LIKE 'z%' LIMIT 1;
                delete * from db_user where user_id = @user_id;
                @count = @count -1;
        END WHILE;
END;

然后我这样做:

mysql -u root -p mysqldb < clearusers.sql

然后我得到这个错误:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3

我不知道我做错了什么。所以对任何人:提前感谢您的帮助。

过程。

最佳答案

为此您不需要存储过程。你需要的是一行sql

DELETE FROM db_user WHERE user_id LIKE 'z%';

就是这样。您的存储过程所做的是遍历表中名称以 z 开头的所有用户,然后一一删除。这可能意味着数百、数千甚至数百万次重复查询,具体取决于数据的大小。

一般而言,根据经验,当您发现自己循环遍历一个结果集并使用这些结果进行另一个查询时,还有另一种不涉及循环和重复查询的方法。

关于mysql - mysql 数据库上的 While 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40972620/

相关文章:

mysql - SQL 选择在 'in group' 中找到的第一个值

c# - 通过单击 DataGridView 中的“添加”按钮添加行

php - 多表中的 Laravel 关系

php - 如何找到具有数量值的两列之和

mysql - sql/mysql 从结果中减去一组关键字

mysql - 如何使用mysql unix_timestamp()作为自动递增的起点?

mysql - 启用 “use gRPC for file sharing”后,macos上的Docker 2.4无法正确安装卷

php - 如何将一行的主键插入到它的另一列中?

php - 使用 PHP 更新 MySQL 数据库时出错

MySQL:获取具有最小值的整行