首先,对于我的菜鸟问题感到抱歉,因为我很确定它是。
我在 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/