1.插入类型的存储过程(判断是否存在型)
/*创建一个存储过程(名字自定),实现课程表的插入,需要判断当前课程名称的课程是否存在
*/
CREATE PROCEDURE insert_course(IN course_name VARCHAR(50), IN credit INT)
BEGIN
DECLARE course_id INT;
SELECT 课程id INTO course_id FROM 课程表 WHERE 课程名称 = course_name;
IF course_id >0 THEN
SELECT '该课程已存在' AS result;
ELSE
INSERT INTO 课程表 (课程名称, 学分) VALUES (course_name, credit);
SELECT '插入成功' AS result;
END IF;
END;
2.定义函数型插入存储过程
/*创建一个存储过程(名字自定),实现学生表的插入,姓名拼音缩写需要调用getstrpy函数实现。
*/
CREATE PROCEDURE insert_student(
IN p_id INT,
IN p_num VARCHAR(20),
IN p_name VARCHAR(20),
IN p_major VARCHAR(20),
IN p_grade VARCHAR(10)
)
BEGIN
DECLARE p_py VARCHAR(100);
SET p_py = getstrpy(p_name);
INSERT INTO 学生表 (学生id, 学号, 姓名, 专业, 年级, 姓名拼音缩写)
VALUES (p_id, p_num, p_name, p_major, p_grade, p_py);
END;
3.BEFORE INSERT型
/*触发器,当新增学生时自动处理姓名拼音缩写。*/
CREATE TRIGGER trg_姓名拼音缩写
BEFORE INSERT ON 学生表
FOR EACH ROW
SET NEW.姓名拼音缩写 = pysx(NEW.姓名);
4.AFTER UPADTE型
/*触发器,当修改学生时自动处理姓名拼音缩写。*/
CREATE TRIGGER update_pinyin AFTER UPDATE ON 学生表 FOR EACH ROW
BEGIN
IF NEW.姓名 != OLD.姓名 THEN
SET NEW.姓名拼音缩写 = pysx(NEW.姓名);
END IF;
END;
5.AFTER DELETE型
/*在课程表上创建一个触发器,当删除课程信息时自动删除该课程的选课信息。*/
CREATE TRIGGER 删除课程信息触发器
AFTER DELETE ON 课程表
FOR EACH ROW
BEGIN
DELETE FROM 选课表 WHERE 课程id = OLD.课程id;
END;
6.AFTER INSERT型
/*商品表上触发器,当新增商品时自动在库存表中插入该商品的库存信息(库存数量为0)。*/
CREATE TRIGGER 新增商品触发器
AFTER INSERT ON 商品表
FOR EACH ROW
BEGIN
INSERT INTO 库存表 (商品id, 库存数量) VALUES (NEW.商品id, 0);
END;