四、Mysql数据库编程[触发器、存储过程、函数]
2024-01-01 20:26:15
一、数据库编程
1.触发器
解释:触发器(trigger)能够在sql里面自动执行,当设定好某个条件,当条件满足时,sql将自动执行某些语句
,其中触发器里面有关键字NEW
和OLD
代表修改前和修改后的值
-- 创建触发器Tr_1,功能是当对表sc的grade 值进行修改时,若分数减少了20%,则将此次操作记录到另一个表sc_u中
DELIMITER //
CREATE TRIGGER Tr_1
AFTER UPDATE ON sc
FOR EACH ROW
BEGIN
DECLARE old_grade INT;
DECLARE new_grade INT;
SET old_grade = OLD.grade;
SET new_grade = NEW.grade;
IF ((old_grade - new_grade) / old_grade >= 0.2) THEN
INSERT INTO sc_u (Sno, Cno, grade_change)
VALUES (OLD.Sno, OLD.Cno, old_grade - new_grade);
END IF;
END //
DELIMITER ;
-- 创建触发器当插入的p_name不是为‘jack’时自动修改为‘jack’
DELIMITER //
CREATE TRIGGER T
BEFORE INSERT ON test1
FOR EACH ROW
BEGIN
IF NEW.p_name != 'jack' THEN
SET NEW.p_name = 'jack';
END IF;
END; //
DELIMITER;
2.存储过程
解释:MySQL存储过程(procedure)是一组预先编写并存储在数据库中的SQL语句集合,类似于程序中的函数。
2.1 无参数
// 查询所有学生的信息(无参数)
DELIMITER //
CREATE PROCEDURE getall()
BEGIN
SELECT * FROM student;
END //
DELIMITER;
// 调用
call getall();
2.2 有参数
// 查询所有学生的信息(有参数)
DELIMITER //
CREATE PROCEDURE getallbyid(IN na CHAR(30))
BEGIN
SELECT * FROM student WHERE Sno=na;
END //
DELIMITER ;
// 调用
CALL getallbyid('5351424');
2.3 带有返回值
// 统计同年龄个数(带返回值)
DELIMITER //
CREATE PROCEDURE gos(IN age INT, OUT num INT)
BEGIN
SELECT COUNT(sage) INTO num FROM student WHERE sage=age;
END //
DELIMITER ;
// 调用
CALL go(18,@a);
SELECT @a;
3.函数
-- 没有in out
DELIMITER //
CREATE FUNCTION godlll(age INT) RETURNS INT NO SQL
BEGIN
DECLARE n INT;
SELECT COUNT(sage) INTO n FROM student WHERE sage = age;
RETURN n;
END //
DELIMITER ;
select godlll(18);
文章来源:https://blog.csdn.net/weixin_46765649/article/details/135044074
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!