DDL(智能生成,在Visual Studio Code 中安装插件baidu)
CREATE TABLE student (
id INT PRIMARY KEY AUTO_INCREMENT,
userName VARCHAR(100) NOT NULL,
phone VARCHAR(20),
age INT,
sex VARCHAR(10),
introduce TEXT
);
问题一:帮我根据DDL生成一个可以添加20万条数据的存储过程(选中DDL前提下)
DELIMITER //
CREATE PROCEDURE InsertRandomStudents(IN num_students INT)
BEGIN
DECLARE counter INT DEFAULT 0;
DECLARE random_userName VARCHAR(100);
DECLARE random_phone VARCHAR(20);
DECLARE random_age INT;
DECLARE random_sex ENUM('Male', 'Female', 'Other');
DECLARE random_introduce TEXT;
WHILE counter < num_students DO
-- Generate random userName (for simplicity, using 'Student' prefix with a number)
SET random_userName = CONCAT('Student', FLOOR(RAND() * 1000000));
-- Generate random phone number
SET random_phone = CONCAT(FLOOR(RAND() * (9999999999 - 1000000000 + 1)) + 1000000000);
-- Generate random age between 18 and 30
SET random_age = FLOOR(RAND() * (30 - 18 + 1)) + 18;
-- Generate random sex
SET random_sex = ELT(1 + FLOOR(RAND() * 3), 'Male', 'Female', 'Other');
-- Generate random introduce (for simplicity, using a short text)
SET random_introduce = CONCAT('This is a random introduction for ', random_userName);
-- Insert the generated data into the student table
INSERT INTO student (userName, phone, age, sex, introduce)
VALUES (random_userName, random_phone, random_age, random_sex, random_introduce);
-- Increment the counter
SET counter = counter + 1;
END WHILE;
END //
DELIMITER ;
CALL InsertRandomStudents(200000);
问题二:帮我根据DDL生成一个添加数据的存储过程,要求2个参数为userName与introduce,插入的数据userName不能以张王李赵开头(选中DDL前提下)
DELIMITER //
CREATE PROCEDURE InsertStudent(IN p_userName VARCHAR(100), IN p_introduce TEXT)
BEGIN
-- 检查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 cannot start with 张, 王, 李, or 赵';
ELSE
-- 如果不是以这些姓氏开头,则执行插入操作
INSERT INTO student (userName, introduce) VALUES (p_userName, p_introduce);
END IF;
END //
DELIMITER ;