Ubuntu22.04下 MySQL8创建并使用存储过程

在Ubuntu下的MySQL 8中创建并使用存储过程:

  1. 使用mysql命令登录到MySQL服务器,例如:
bash 复制代码
mysql -u root -p

输入root用户的密码。

  1. 选择你想要创建存储过程的数据库,例如:
sql 复制代码
CREATE DATABASE mydb;

USE mydb;

CREATE TABLE user (
  id INT AUTO_INCREMENT PRIMARY KEY,
  uid INT,
  name VARCHAR(100),
  email VARCHAR(255),
  pwd VARCHAR(100)
)CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;


CREATE TABLE user_id (
  id INT AUTO_INCREMENT PRIMARY KEY,
)CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
  1. 复制存储过程代码,并粘贴到MySQL命令行界面中,然后按Enter键执行。例如:
sql 复制代码
delimiter //
CREATE DEFINER=`root`@`%` PROCEDURE `reg_user`(
    IN `new_name` VARCHAR(255), 
    IN `new_email` VARCHAR(255), 
    IN `new_pwd` VARCHAR(255), 
    OUT `result` INT)
BEGIN
    -- 如果在执行过程中遇到任何错误,则回滚事务
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
        -- 回滚事务
        ROLLBACK;
        -- 设置返回值为-1,表示错误
        SET result = -1;
    END;

    -- 开始事务
    START TRANSACTION;

    -- 检查用户名是否已存在
    IF EXISTS (SELECT 1 FROM `user` WHERE `name` = new_name) THEN
        SET result = 0; -- 用户名已存在
        COMMIT;
    ELSE
        -- 用户名不存在,检查email是否已存在
        IF EXISTS (SELECT 1 FROM `user` WHERE `email` = new_email) THEN
            SET result = 0; -- email已存在
            COMMIT;
        ELSE
            -- email也不存在,更新user_id表
            UPDATE `user_id` SET `id` = `id` + 1;

            -- 获取更新后的id
            SELECT `id` INTO @new_id FROM `user_id`;

            -- 在user表中插入新记录
            INSERT INTO `user` (`uid`, `name`, `email`, `pwd`) VALUES (@new_id, new_name, new_email, new_pwd);
            -- 设置result为新插入的uid
            SET result = @new_id; -- 插入成功,返回新的uid
            COMMIT;

        END IF;
    END IF;
    
END//
  1. 存储过程创建成功,会返回一个确认消息。

  2. 要调用存储过程并读取使用,你可以使用CALL语句,例如:

    sql 复制代码
    CALL reg_user('new_username', 'new_email@example.com', 'new_password', @result);

    这里@result是一个用户定义的变量,用于存储存储过程返回的结果。

  3. 调用存储过程后,你可以查询变量@result的值来获取结果:

    sql 复制代码
    SELECT @result;

请注意,确保你已经创建了useruser_id表,并且它们具有适当的字段和数据类型,以便存储过程可以正常工作。此外,确保user_id表有一个自增的id字段,以便在新用户注册时自动更新。

相关推荐
小苏兮30 分钟前
【把Linux“聊”明白】自动化构建-make/Makefile详解
linux·服务器·学习·自动化·1024程序员节
wei_shuo1 小时前
全场景自动化 Replay 技术:金仓 KReplay 如何攻克数据库迁移 “难验证“ 难题
数据库·自动化·king base
葡萄城技术团队1 小时前
打破误解!MongoDB 事务隔离级别深度实测:快照隔离竟能防住 8 种异常?
数据库
Gold Steps.1 小时前
数据库正常运行但是端口变成了0?
数据库·mysql
杂亿稿1 小时前
增删改查操作
数据库
Code_Geo1 小时前
在postgres数据库中Postgres FDW 全面详解
数据库·fdw
QT 小鲜肉1 小时前
【个人成长笔记】将Try Ubuntu里面配置好的文件系统克隆在U盘上(创建一个带有持久化功能的Ubuntu Live USB系统)
linux·开发语言·数据库·笔记·ubuntu
LWy6104261 小时前
数据库库、表的创建及处理
数据库
Jay_Franklin1 小时前
Python中使用sqlite3模块和panel完成SQLite数据库中PDF的写入和读取
数据库·笔记·python·pycharm·sqlite·pdf·py
小锅巴1232 小时前
百度测开面经(分类版)
数据库·分类·数据挖掘