***********【mysql 存储过程和触发器 -- 别安驹】*********************

1、什么情况下使用存储过程?

完成一些比较麻烦的逻辑,比如多表在mysql端的cpu很空闲的情况下,用存储过程是不错的选择,

1.1、简单的存储过程示例:简单写入

DELIMITER $$
USE `curl_test`$$
DROP PROCEDURE IF EXISTS `data_s`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `data_s`() BEGIN DECLARE i INT DEFAULT 0; WHILE i < 1000 DO INSERT INTO album(`artist_id`,`name`,`url`)
VALUES(i,'别安驹','2015-10-01'); SET i = i + 1; END WHILE; END$$
DELIMITER ;

1.2、简单的存储过程示例:关联更新

DROP PROCEDURE IF EXISTS testProcedure;
CREATE PROCEDURE testProcedure()
BEGIN
DECLARE flag INT DEFAULT 0;
DECLARE tID INT;
DECLARE tDept CHAR(255);
DECLARE tAlias CHAR(20);
DECLARE cur CURSOR FOR SELECT id,dept FROM users;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag = 1;
OPEN cur;
FETCH cur INTO tID,tDept;
WHILE flag<>1 DO
SELECT alias FROM dept WHERE name = tDept INTO tAlias;
UPDATE users SET dept_alias=tAlias WHERE id=tID;
FETCH cur INTO tID,tDept;
END WHILE;
CLOSE cur;
END

存储过程的优点:

预编译,相对于直接的SQL效率会高点,同时可以降低SQL语句传输过程中消耗的流量;

简化业务逻辑,可以把需求转化给专业的DBA(如果有的话);

更方便的使用MySQL数据库事物的处理,尤其是购物类网站;

安全、用户权限更容易管理;

修改存储过程基本上不需要修改程序代码,而直接写SQL修改SQL一般都要修改相关的程序;

2、mysql触发器

触发器(trigger):监视某种情况,并触发某种操作。

触发器创建语法四要素:

2.1.监视地点(table)

2.2.监视事件(insert/update/delete)

2.3.触发时间(after/before)

2.4.触发事件(insert/update/delete)

语法:

create trigger triggerName

after/before insert/update/delete on 表名

for each row #这句话在mysql是固定的

begin

sql语句;

end;

触发器示例:"在album表新增数据的时候更新artist表的num字段减3"

DELIMITER $$

USE `curl_test`$$

DROP TRIGGER /*!50032 IF EXISTS */ `change_num`$$

CREATE
/*!50017 DEFINER = 'root'@'localhost' */ TRIGGER `change_num` AFTER INSERT ON `album`
FOR EACH ROW BEGIN
UPDATE `artist` SET num=num-3; END;
$$ DELIMITER ;

mysql存储过程和触发器的应用的更多相关文章

  1. mysql存储过程和触发器

    mysql编程(存储过程和触发器) 存储过程 什么是存储过程 存储过程,带有逻辑的sql语句 存储过程特点 执行效率非常快!存储过程是在数据库的服务器端执行的!!! 移植性很差!不同数据库的存储过程是 ...

  2. mysql 存储过程 函数 触发器

    mysql存储过程与函数 存储过程下载  demo mysql> delimiter // -- 这里//为修改默认分隔符: mysql> CREATE PROCEDURE simplep ...

  3. MySQL存储过程、触发器、自定义函数、事务

    1.存储过程 MySQL中存储过程的参数中有IN.OUT.INOUT类型,但是函数的参数只能是IN类型的. “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参 ...

  4. MySQL存储过程及触发器

    一.存储过程 存储过程的基本格式如下: -- 声明结束符 -- 创建存储过程 DELIMITER $ -- 声明存储过程的结束符 CREATE PROCEDURE pro_test() --存储过程名 ...

  5. MySql 存储过程、触发器和权限问题

    存储过程 1.1 什么是存储过程 存储过程,带有逻辑的sql语句 之前的sql没有条件判断,没有循环 存储过程带上流程控制语句(if  while) 1.2 存储过程特点 1)执行效率非常快!存储过程 ...

  6. MySQL存储过程、触发器 小例子

    一.存储过程 语法: CREATE PROCEDURE([[IN |OUT |INOUT ] 参数名 数据类形...]) BEGIN ... END 参数: IN 输入参数 表示该参数的值必须在调用存 ...

  7. mysql 存储过程和触发器

    存储过程 -- 声明结束符 -- 创建存储过程 DELIMITER $ -- 声明存储过程的结束符 CREATE PROCEDURE pro_test() --存储过程名称(参数列表) BEGIN - ...

  8. MySQL存储过程调试工具-dbForge Studio for MySQL

    工具官网地址:http://www.devart.com/dbforge/mysql/studio/ 对于某些存储过程很多且复杂的SQL的应用,在短时间内要使得所有MySQL存储过程和函数正常运行,那 ...

  9. Mysql 视图 游标 触发器 存储过程 事务

    Mysql 视图 触发器 存储过程 游标 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中 ...

随机推荐

  1. Dima and Salad(完全背包)

    Dima and Salad time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  2. Fire Net(dfs)

    Fire Net Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  3. (转)flash的Socket通讯沙箱和安全策略问题

    一.沙箱和安全策略问题 1.此问题发生在连接时,准确地说是连接前,分别两种情况: 1.本地播放 本地播放时,默认情况下Flash Player将不允许swf访问任何网络. 访问http://www.m ...

  4. Swift中元组(Tuples),结构体(Struct),枚举(Enums)之间的区别

    Swift有许多种存储数据方式,你可以用枚举(enums),元组(tuples),结构体(structs),类(classes),在这篇文章中我们将比较枚举.元组.结构体之间区别,首先从最简单的开始- ...

  5. 学习ios设计(1)

    两年前,苹果为现代的使用者完全改变了设计语言.对于设计者来说,这使得他们更容易关注动画和功能而不是其他的细枝末节. 我已经被问过很多次怎样开始设计或者是有什么捷径可以成为更好的设计师.虽然没有银弹,然 ...

  6. Swift和Objective-C的差异性

    1:Type Swift提供了类型推断,不需要人工的去注释变量的类型信息,编译器会通过变量的值来推断类型.例如,编译器可以自动将该变量设置为字符串: // 自动推断,不显示 var name1 = & ...

  7. 实现FileCopy(Ring0 x86 x64)

    1.1 内核不接受一个字符串文件路径,必须填写一个OBJECT_ATTRIBUTES结构. 这个结构,在InitializeObjectAttributes初始化 typedef struct _OB ...

  8. Android 内部启动其他应用,以及打开指定qq聊天界面

    在自己应用中打开第三方应用,有好多种方法,这里举例一种: //以打开微信为例,前提需要知道打开应用的包名,一般一个发布版本的应用,包名不会轻易改变的,但是,打开QQ就要注意了,毕竟QQ的发布版本有不下 ...

  9. Android 动画小知识点

    <?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="h ...

  10. 稀疏图(邻接链表),并查集,最短路径(Dijkstra,spfa),最小生成树(kruskal,prim)

    全部函数通过杭电 1142,1162,1198,1213等题目测试. #include<iostream> #include<vector> #include<queue ...