L
L
LearnJava
Search…
⌃K

存储过程和触发器

存储过程

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

操作存储过程

示例
# 创建存储过程
mysql> delimiter $$  #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
mysql> CREATE PROCEDURE del_data(IN p_in varchar(10))
-> BEGIN
->   DELETE FROM test
-> WHERE id=p_in;
-> END$$
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;  #将语句的结束符号恢复为分号
# 原始数据
mysql> select * from test;
+------+------+
| id | name |
+------+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
+------+------+
3 rows in set (0.001 sec)
# 调用存储过程,传入参数
mysql> call del_data(3);
Query OK, 1 row affected (0.005 sec)
mysql> select * from test;
+------+------+
| id | name |
+------+------+
| 1 | 1 |
| 2 | 2 |
+------+------+
2 rows in set (0.001 sec)
# 查看数据库的存储过程
SHOW PROCEDURE STATUS where db='test';
# 查看某个存储过程
SHOW CREATE PROCEDURE test.del_data;
# 删除存储过程
DROP PROCEDURE del_data;

触发器

在指定表上,(insert(插入)、update(跟新)、delete(删除))事件动作,触发(After(之后)时机,Before(之前)),执行指定的一群或一个sql语句。
量少使用触发器,不建议使用。

操作触发器

CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt
trigger_name : 触发器名称,用户自行指定 trigger_time: 触发时机,取值BEFORE(之前)、AFTER(之后) trigger_event : 触发事件,INSERTUPDATEDELETE。(插入、更新、删除) tbl_name : 需要建立触发器的表名。 trigger_stmt : 触发程序体,可以是一条SQL语句或是BEGINEND包含的索条语句
由上面,可以知道MYSQL可以创建6种类型的触发器。 (BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE) (AFTER INSERT、AFTER UODATE、AFTER DELETE
并且一张表上不能创建两个相同类型的触发器,因此一张表上面最多能创建6种类型的触发器。
实例
# 创建触发器
delimiter $$
create trigger tt after insert on test2 for each row
begin
insert into test values(1,1);
end$$
delimiter ;
# 这个触发器的作用是当有数据插入test2表的时候,在test表中插入一条数据
# 查看触发器
show triggers from test;
# 删除触发器
drop trigger test.t_insert;