利用if-else,while-do,case-end,的存储过程

DDL

CREATE TABLE student (
    id INT PRIMARY KEY AUTO_INCREMENT,  -- 自增ID作为主键
    createDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,  -- 记录创建时间,默认为当前时间
    userName VARCHAR(255) NOT NULL,  -- 用户名,不能为空
    phone VARCHAR(20),  -- 电话号码,可根据实际需要调整长度
    aage INT,  -- 假设aage是某种特定年龄信息,使用整数类型
    sex ENUM('M', 'F', 'O') NOT NULL,  -- 性别,枚举类型,可根据需要调整选项
    introduce TEXT  -- 介绍,文本类型,可存储长文本
);

存储过程-函数

DELIMITER //

CREATE PROCEDURE AddStudentData()
BEGIN
    DECLARE i INT DEFAULT 0; -- 循环计数器
    DECLARE v_userName VARCHAR(255); -- 用户名变量
    DECLARE v_phone VARCHAR(20); -- 电话号码变量
    DECLARE v_age INT; -- 年龄变量
    DECLARE v_sex VARCHAR(10); -- 性别变量
    DECLARE v_introduce TEXT; -- 介绍变量

    -- 循环添加20万条数据
    WHILE i < 200000 DO
        -- 随机生成用户名(示例:User12345)
        SET v_userName = CONCAT('User', FLOOR(RAND() * 100000) + 1);
        
        -- 随机生成电话号码(示例:13800138000)
        SET v_phone = CONCAT('138', LPAD(FLOOR(RAND() * 100000000). 7, '0'));
        
        -- 随机生成年龄(范围:18-30)
        SET v_age = FLOOR(RAND() * (30 - 18 + 1)) + 18;
        
        -- 随机分配性别(男或女)
        SET v_sex = IF(RAND() > 0.5, '男', '女');
        
        -- 生成介绍文本(示例:这是用户User12345的介绍)
        SET v_introduce = CONCAT('这是用户', v_userName, '的介绍');
        
        -- 插入数据到student表
        INSERT INTO student (userName, phone, age, sex, introduce)
        VALUES (v_userName, v_phone, v_age, v_sex, v_introduce);
        
        -- 更新计数器
        SET i = i + 1;
    END WHILE;
END //

DELIMITER ;

添加索引

if判断与case-when语句

DELIMITER //

CREATE PROCEDURE InsertStudent(
    IN p_userName VARCHAR(255),
    IN p_age INT,
    IN p_introduce TEXT
)
BEGIN
    DECLARE v_phone VARCHAR(20); -- 电话号码变量
    DECLARE v_sex ENUM('M', 'F', 'O'); -- 性别变量

    -- 检查输入参数是否为空
    IF p_userName IS NULL OR p_age IS NULL OR p_introduce IS NULL THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '输入的数据不允许为空';
    END IF;

    -- 检查userName是否以张、王、李、兆开头
    IF LEFT(p_userName, 1) = '张' OR LEFT(p_userName, 1) = '王' OR 
       LEFT(p_userName, 1) = '李' OR LEFT(p_userName, 1) = '兆' THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'userName的名称不允许以张、王、李、兆开头';
    END IF;

    -- 生成随机的电话号码,例如“13812345678”
    SET v_phone = CONCAT('138', LPAD(FLOOR(RAND() * 99999999) + 1000000, 7, '0'));
    
    -- 随机分配性别,M代表男,F代表女,O代表其他
    SET v_sex = IF(RAND() < 0.33, 'M', IF(RAND() < 0.66, 'F', 'O'));

    -- 插入数据到student表中
    INSERT INTO student (userName, phone, aage, sex, introduce)
    VALUES (p_userName, v_phone, p_age, v_sex, p_introduce);
END //

DELIMITER ;
CALL InsertStudent('示例用户名', 25, '这是用户的介绍文本');

SELECT 
    id,
    userName,
    phone,
    aage,
    CASE sex
        WHEN 'M' THEN '男性'
        WHEN 'F' THEN '女性'
        WHEN 'O' THEN '泰国人'
        ELSE '未知' -- 这个ELSE分支是可选的,用于处理除'M', 'F', 'O'之外的其他情况
    END AS displaySex,
    introduce
FROM 
    student
LIMIT 
    2000;

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值