四、Mysql数据库编程[触发器、存储过程、函数]

发布时间:2024年01月01日

一、数据库编程

1.触发器

解释:触发器(trigger)能够在sql里面自动执行,当设定好某个条件,当条件满足时,sql将自动执行某些语句
,其中触发器里面有关键字NEWOLD代表修改前和修改后的值

-- 创建触发器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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。