mysql - 简单的触发器和存储过程
delimiter //
drop PROCEDURE proc_member_preprocessor;//
CREATE PROCEDURE proc_member_preprocessor (IN param_uid int(10))
main:BEGIN
SELECT COUNT(uid) INTO @proc_has_user FROM pre_common_member WHERE uid=param_uid; IF @proc_has_user < 1 THEN
LEAVE main;
END IF; INSERT INTO pre_common_member_tongji (uid,username,friends,posts,doings) (SELECT uid,'admin',friends,posts,doings FROM pre_common_member_count WHERE uid=param_uid);
END;//
CREATE TRIGGER trigger_pre_post AFTER INSERT ON pre_forum_thread FOR EACH ROW CALL proc_member_preprocessor(NEW.authorid);
解释下触发器的语法:
CREATE TRIGGER TIME(BEFORE | AFTER) EVENT(INSERT | UPDATE | DELETE) ON table FOR EACH ROW sql
UPDATE包含(NEW,OLD)INSERT(NEW)DELETE只有(OLD)
http://www.cnblogs.com/amboyna/archive/2008/01/27/1055178.html 这个文章里面说的非常详细。
/*定义存储过程*/
delimiter //
DROP PROCEDURE pro_demo; //
CREATE PROCEDURE pro_demo()
SELECT * FROM pre_forum_thread; // /*传入变量*/
delimiter //
DROP PROCEDURE pro_demo; //
CREATE PROCEDURE pro_demo(IN param_user varchar(30))
SET @username = param_user;
// /*传出变量*/
delimiter //
DROP PROCEDURE pro_demo; //
CREATE PROCEDURE pro_demo(OUT param_uid int)
BEGIN
SET param_uid = 5;
END; //
CALL pro_demo(@y);//
/*赋值并插入到数据表*/
delimiter //
DROP PROCEDURE pro_demo; //
CREATE PROCEDURE pro_demo()
BEGIN
SET @a = '';
SET @b = 'xixi';
INSERT INTO pre_proc_demo (k,v) VALUES (@a,@b);
END; //
/* 定义变量 @ INT,CHAR,VARCHAR..*/
delimiter //
DROP PROCEDURE pro_demo; //
CREATE PROCEDURE pro_demo()
BEGIN
DECLARE a VARCHAR(5);
DECLARE b VARCHAR(5);
SET a='';
SET b='awddwaadw';
INSERT INTO pre_proc_demo (k,v) VALUES (a,b);
END; //
/* 存储过程中if else的使用 */
delimiter //
DROP PROCEDURE sp_demo; //
CREATE PROCEDURE sp_demo(IN param_var int(10))
BEGIN
DECLARE a INT(10);
SET a = param_var + 1; if a = 0 then
SELECT 0;
elseif a % 2 = 0 then
SELECT 2;
else
SELECT 1;
end if;
END;// /* case语句的使用 */
delimiter //
DROP PROCEDURE sp_demo; //
CREATE PROCEDURE sp_demo(IN param_uid int(10))
BEGIN
case param_uid
when 0 then SELECT "这是0";
when 1 then SELECT "这是1";
else SELECT "没找到";
end case;
END; // /* while do..while的使用 */
delimiter //
DROP PROCEDURE sp_demo; //
CREATE PROCEDURE sp_demo(IN param_i int(10))
BEGIN
while param_i < 10
do
SELECT param_i;
set param_i=param_i+1;
end while;
END; // /* repeat的使用 */
delimiter //
DROP PROCEDURE sp_demo; //
CREATE PROCEDURE sp_demo(IN param_i int(10))
BEGIN
repeat
SELECT param_i;
set param_i = param_i + 1;
until param_i > 10
end repeat;
END; // /* loop的使用 */
delimiter //
DROP PROCEDURE sp_demo; //
CREATE PROCEDURE sp_demo(IN param_i int(10))
BEGIN LOOP_DEMO:loop
SELECT param_i;
set param_i = param_i + 1; if param_i > 5 then
leave LOOP_DEMO;
end if; end loop;
END; //
mysql - 简单的触发器和存储过程的更多相关文章
- mysql 查询表,视图,触发器,函数,存储过程
1. mysql查询所有表: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '数据库名' AND TAB ...
- mysql查看所有触发器以及存储过程等操作集合
今天在做每个月定时扣费的功能 用到了Mysql的Event Scheduler 昨完之后发现一个问题 Event Scheduler 默认是不开启的 要在mysql内执行SET GLOBAL even ...
- 【MySQL笔记】触发器,存储过程和函数
一.触发器 触发器(TRIGGER):是由事件来触发某个操作.当数据库系统执行这些事件时,就会激活触发器执行相应的操作.MySQL从5.0.2版本开始支持触发器. 触发事件:INSERT语句.UPDA ...
- MySQL拓展 视图,触发器,事务,存储过程,内置函数,流程控制,索引,慢查询优化,数据库三大设计范式
视图: 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何使用视图 create view tea ...
- MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
- MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁
浏览目录: 1.视图 2.触发器 3.存储过程 4.函数 5.事物 6.数据库锁 7.数据库备份 1.视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据 视 ...
- 关于mysql触发器和存储过程的理解
内容源自:一篇很棒的 MySQL 触发器学习教程 一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊 ...
- 触发器 视图 存储过程 mysql常用函数
...
- mysql数据库从删库到跑路之mysql:视图、触发器、事务、存储过程、函数
mysql:视图.触发器.事务.存储过程.函数 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果 ...
随机推荐
- mysql 存储过程简单学习
转载自:http://blog.chinaunix.net/uid-23302288-id-3785111.html ■存储过程Stored Procedure 存储过程就是保存一系列SQL命令的集合 ...
- (转)使用 linux tar 命令压缩与解压文件
原文链接 http://www.cnblogs.com/qq78292959/archive/2011/07/06/2099427.html tar -c: 建立压缩档案-x:解压-t:查看内容-r: ...
- 安装Oracle 10g RAC是否需要安装HACMP
实际上无论在哪个操作系统(AIX,HP-UX,Solaris,Linux)上安装Oracle10g RAC都不再需要Vendor Clusterware(IBM的HACMP,HP的Service Gu ...
- ubuntu安装Percona Server
Percona Server是mysql数据库的一个衍生版本,在性能,稳定性和可管理性上都有很大的提升,目前淘宝的mysql数据库就是基于Percona Server,请原谅我这么喜欢研究淘宝的技术. ...
- Matplotlib 库 : 绘图和可视化
一.Matplotlib基础知识 1.1Matplotlib中的基本图表包括的元素 x轴和y轴 axis水平和垂直的轴线 x轴和y轴刻度 tick刻度标示坐标轴的分隔,包括最小刻度和最大刻度 x轴和y ...
- WinForm多线程+委托防止界面卡死
1.当有大量数据需要计算.显示在界面或者调用sleep函数时,容易导致界面卡死,可以采用多线程加委托的方法解决 using System; using System.Collections.Gener ...
- prettytable模块(格式化打印内容)
1.查看系统是否已经安装prettytable模块 2.下载prettytable模块 登陆:https://pypi.python.org/pypi/PrettyTable 3.安装PrettyTa ...
- delphi BLE 后台
http://codeverge.com/embarcadero.delphi.ios/
- VS2015编译VLC2.2.1(under WIN7-64)<转>
概述: 感谢https://github.com/sunqueen/vlc-2.2.1.32-2013 这个工程,我的工作基本上都是基于它,我只是觉得他的工程设置不够清晰,重新做了一次.区别在于我的工 ...
- linux下使用adb查看android手机的logcat
root@ubuntu:/home/song# adb logcat -s VLC