一、数据库编程
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
BEGINDECLARE 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) THENINSERT 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' THENSET NEW.p_name = 'jack';END IF;
END; //DELIMITER;
2.存储过程
解释:MySQL存储过程(procedure)是一组预先编写并存储在数据库中的SQL语句集合,类似于程序中的函数。
2.1 无参数
// 查询所有学生的信息(无参数)
DELIMITER //
CREATE PROCEDURE getall()
BEGINSELECT * FROM student;END //
DELIMITER;// 调用
call getall();
2.2 有参数
// 查询所有学生的信息(有参数)
DELIMITER //
CREATE PROCEDURE getallbyid(IN na CHAR(30))BEGINSELECT * FROM student WHERE Sno=na;
END //DELIMITER ;// 调用
CALL getallbyid('5351424');
2.3 带有返回值
// 统计同年龄个数(带返回值)
DELIMITER //
CREATE PROCEDURE gos(IN age INT, OUT num INT)
BEGINSELECT 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
BEGINDECLARE n INT;SELECT COUNT(sage) INTO n FROM student WHERE sage = age;RETURN n;
END //
DELIMITER ;select godlll(18);