解释:触发器(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;
解释:MySQL存储过程(procedure)是一组预先编写并存储在数据库中的SQL语句集合,类似于程序中的函数。
// 查询所有学生的信息(无参数)
DELIMITER //
CREATE PROCEDURE getall()
BEGIN
SELECT * FROM student;
END //
DELIMITER;
// 调用
call getall();
// 查询所有学生的信息(有参数)
DELIMITER //
CREATE PROCEDURE getallbyid(IN na CHAR(30))
BEGIN
SELECT * FROM student WHERE Sno=na;
END //
DELIMITER ;
// 调用
CALL getallbyid('5351424');
// 统计同年龄个数(带返回值)
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;
-- 没有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);