创建数据库和表
我们需要创建一个示例数据库和表:
-创建数据库 CREATE DATABASE IF NOT EXISTS user_management; USE user_management; -创建用户表 CREATE TABLE IF NOT EXISTS users ( user_id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, email VARCHAR(100), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
创建存储过程
我们将创建一个存储过程来插入新的用户记录,并返回插入的用户ID。
DELIMITER // CREATE PROCEDURE AddUser( IN p_username VARCHAR(50), IN p_email VARCHAR(100), OUT p_user_id INT ) BEGIN DECLARE v_user_id INT; -插入新用户记录 INSERT INTO users (username, email) VALUES (p_username, p_email); -获取刚刚插入的用户的ID SET v_user_id = LAST_INSERT_ID(); -将用户ID赋值给输出参数 SET p_user_id = v_user_id; END // DELIMITER ;
调用存储过程
现在我们可以使用这个存储过程来插入新的用户数据并获取用户ID。
-声明一个变量来接收输出的用户ID SET @output_user_id = 0; -调用存储过程 CALL AddUser('john_doe', 'john.doe@example.com', @output_user_id); -查看插入的用户ID SELECT @output_user_id;
更新存储过程
假设我们需要修改这个存储过程,使其在插入用户之前检查用户名是否已经存在,如果存在则抛出错误,否则继续插入,下面是修改后的存储过程:
DELIMITER // DROP PROCEDURE IF EXISTS AddUser; -删除旧的存储过程 CREATE PROCEDURE AddUser( IN p_username VARCHAR(50), IN p_email VARCHAR(100), OUT p_user_id INT ) BEGIN DECLARE v_user_id INT; DECLARE v_exists INT; -检查用户名是否存在 SELECT COUNT(*) INTO v_exists FROM users WHERE username = p_username; IF v_exists > 0 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Username already exists'; END IF; -插入新用户记录 INSERT INTO users (username, email) VALUES (p_username, p_email); -获取刚刚插入的用户的ID SET v_user_id = LAST_INSERT_ID(); -将用户ID赋值给输出参数 SET p_user_id = v_user_id; END // DELIMITER ;
再次调用存储过程
现在我们可以再次调用存储过程,看看它是否能正确处理已存在的用户名:
-声明一个变量来接收输出的用户ID SET @output_user_id = 0; -尝试插入一个已经存在的用户 CALL AddUser('john_doe', 'john.doe@example.com', @output_user_id); -查看结果(应该会抛出错误) SELECT @output_user_id;
是一个完整的存储过程编写、调用及修改的详细示例,希望对你有所帮助!
小伙伴们,上文介绍了“app存储过程编写”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/724954.html