1.MySQL 事务

mysql 在触发器中设置返回消息 mysql触发器回滚_存储过程

#开启事务
BEGIN
#提交事务
COMMIT
#创建表
CREATE TABLE IF NOT EXISTS runoob(id INT(5))ENGINE=INNODB;
SELECT * FROM runoob;
#开启事务
BEGIN
#输入
INSERT INTO runoob VALUES(3);
#回滚
ROLLBACK;
SELECT * FROM runoob

 

2.触发器
一、触发器概念

触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,例如当对一个表进行操作( insert,delete, update)时就会激活它执行。

二、触发器创建语法四要素 

1.监视地点(table)  
2.监视事件(insert/update/delete)  
3.触发时间(after/before)  
4.触发事件(insert/update/delete)

触发器插入

DELIMITER $
CREATE TRIGGER abc
AFTER INSERT ON student FOR EACH ROW
BEGIN
 INSERT INTO cj(stu_id,stu_name)VALUES(new.stuid,new.username);
END $
DELIMITER ;
 
#执行触发
INSERT INTO student(username,PASSWORD,birtday)
VALUES('王三','111111','2016-08-23');
SELECT * FROM cj

触发器删除

#触发器2 删除
DELIMITER $
CREATE TRIGGER bcd
AFTER DELETE ON student FOR EACH ROW
BEGIN
DELETE FROM cj WHERE cj.stu_id=old.stuid;
END $
DELIMITER ;

触发器修改

#触发器3 修改
DELIMITER $
CREATE TRIGGER def
BEFORE UPDATE ON student FOR EACH ROW
BEGIN
UPDATE cj SET cj.stu_name=old.username WHERE cj.stu_id=old.stuid;
END $
DELIMITER ;

3.存储过程
MySQL 5.0 版本开始支持存储过程。

存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。 存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。 存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。

优点

存储过程可封装,并隐藏复杂的商业逻辑。
存储过程可以回传值,并可以接受参数。
存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看 表,数据表或用户定义函数不同。
存储过程可以用在数据检验,强制实行商业逻辑等。

创建存储过程

DELIMITER $
CREATE PROCEDURE tesa2()
BEGIN 
	#声明变量类型
	DECLARE un VARCHAR(32) DEFAULT '';
	#赋值
	SET un='abc';
	#将查询结果赋值给un
	SELECT username INTO un FROM student WHERE stuid=1;
	#查询un变量,返回
	SELECT un;
END $
DELIMITER ;
#调用
CALL tesa2()

创建存储过程 变量作用域

#创建存储过程 变量作用域
DELIMITER $
CREATE PROCEDURE tesa3()
BEGIN 
	BEGIN 
		#声明变量类型
		DECLARE un VARCHAR(32) DEFAULT '';
		#赋值
		SET un='abc';
		#将查询结果赋值给un
		SELECT username INTO un FROM student WHERE stuid=1;
		#查询un变量,返回
		SELECT un;
	END;
	BEGIN 
		#声明变量类型
		DECLARE un VARCHAR(32) DEFAULT '';
		#赋值
		SET un='abc';
		#将查询结果赋值给un
		SELECT username INTO un FROM student WHERE stuid=2;
		#查询un变量,返回
		SELECT un;
	END;
END $
DELIMITER ;
#调用
CALL tesa3()