mysql 存储过程 函数 触发器
mysql存储过程与函数
存储过程下载 demo
- mysql> delimiter // -- 这里//为修改默认分隔符;
- mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
- -> BEGIN
- -> SELECT COUNT(*) INTO param1 FROM t;
- -> END//
- Query OK, 0 rows affected (0.00 sec)
- mysql> delimiter ; // -- 改回来这里的默认分隔符为;
这里调用试用call
- mysql> CALL simpleproc(@a);
- mysql> select @a;
函数demo
参数没有输入输出参数
- mysql> CREATE FUNCTION hello (s CHAR(20))
- mysql> RETURNS CHAR(50) DETERMINISTIC
- -> RETURN CONCAT(‘Hello, ‘,s,‘!‘);
这里调用试用 select,和普通函数一样了
- mysql> SELECT hello(‘world‘);
- +----------------+
- | hello(‘world‘) |
- +----------------+
- | Hello, world! |
- +----------------+
变量的使用
- declare last_month_start DATE;
- DECLARE my_sql INT DEFAULT 10 ;
- set var_name = 2;
流程控制
- CREATE DEFINER=`root`@`localhost` PROCEDURE `student_insert`()
- BEGIN
- set @x=0;
- ins :LOOP
- set @x = @x +1;
- if @x=100 then
- leave ins;
- end if;
- insert into student (stuname) values (CONCAT("name",@x));
- END LOOP ins;
- END
- CREATE DEFINER=`root`@`localhost` PROCEDURE `student_insert2`()
- BEGIN
- set @x=100;
- ins :LOOP
- set @x = @x +1;
- if @x=120 then
- leave ins;
- elseif mod(@x,2) = 0 then
- iterate ins;
- end if;
- insert into student (stuname) values (CONCAT("name",@x));
- END LOOP ins;
- END
- CREATE DEFINER=`root`@`localhost` PROCEDURE `loop_demo`()
- BEGIN
- set @x=1 ,@x1=1;
- repeat
- set @x = @x +1;
- until @x > 0 end repeat;
- while @x1 < 2 do
- set @x1=@x1+1;
- end while;
- END
游标的使用
- CREATE DEFINER=`root`@`localhost` PROCEDURE `cursor_demo`()
- BEGIN
- declare i_stuid int;
- declare i_stuname varchar(20);
- declare cur_stu cursor for select stuid,stuname from student;
- declare exit handler for not found close cur_stu;
- set @x1 = 0;
- set @x2 = 0;
- open cur_stu;
- repeat
- fetch cur_stu into i_stuid,i_stuname;
- select i_stuid,i_stuname;
- until 0 end repeat;
- close cur_stu;
- END
- CREATE DEFINER=`root`@`localhost` PROCEDURE `cursor_demo3`()
- BEGIN
- DECLARE done INT DEFAULT 0;
- DECLARE a CHAR(16);
- DECLARE b,c INT;
- DECLARE cur1 CURSOR FOR SELECT stuname,stuid FROM `student`;
- DECLARE cur2 CURSOR FOR SELECT subid FROM `subject`;
- DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000‘ SET done = 1;
- OPEN cur1;
- OPEN cur2;
- REPEAT
- FETCH cur1 INTO a, b;
- FETCH cur2 INTO c;
- IF NOT done THEN
- SELECT a,b,c;
- END IF;
- UNTIL done END REPEAT;
- CLOSE cur1;
- CLOSE cur2;
- END
触发器
必须建立在真实表之上,适合一些初始化数据
- CREATE TABLE test1(a1 INT);
- CREATE TABLE test2(a2 INT);
- CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
- CREATE TABLE test4(
- a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
- b4 INT DEFAULT 0
- );
- DELIMITER |
- CREATE TRIGGER testref BEFORE INSERT ON test1
- FOR EACH ROW BEGIN
- INSERT INTO test2 SET a2 = NEW.a1;
- DELETE FROM test3 WHERE a3 = NEW.a1;
- UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
- END
- |
- DELIMITER ;
- INSERT INTO test3 (a3) VALUES
- (NULL), (NULL), (NULL), (NULL), (NULL),
- (NULL), (NULL), (NULL), (NULL), (NULL);
- INSERT INTO test4 (a4) VALUES
- (0), (0), (0), (0), (0), (0), (0), (0), (0), (0);
查看索引
- show index from table
mysql 存储过程 函数 触发器的更多相关文章
- mysql存储过程和触发器的应用
***********[mysql 存储过程和触发器 -- 别安驹]********************* 1.什么情况下使用存储过程? 完成一些比较麻烦的逻辑,比如多表在mysql端的cpu很空 ...
- 查看SQL SERVER 加密存储过程,函数,触发器,视图
原文:查看SQL SERVER 加密存储过程,函数,触发器,视图 create PROCEDURE sp_decrypt(@objectname varchar(50))ASbeginset noc ...
- MySQL 存储过程 函数 routine 权限
MySQL 存储过程 函数 routine 权限 Table of Contents 1. mysql存储过程/函数权限 1.1. 相关对象操作权限检查 1.2. 执行权限 1 mysql存储过程/函 ...
- MySQL存储过程、触发器、自定义函数、事务
1.存储过程 MySQL中存储过程的参数中有IN.OUT.INOUT类型,但是函数的参数只能是IN类型的. “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参 ...
- mysql存储过程和触发器
mysql编程(存储过程和触发器) 存储过程 什么是存储过程 存储过程,带有逻辑的sql语句 存储过程特点 执行效率非常快!存储过程是在数据库的服务器端执行的!!! 移植性很差!不同数据库的存储过程是 ...
- MySql 存储过程、触发器和权限问题
存储过程 1.1 什么是存储过程 存储过程,带有逻辑的sql语句 之前的sql没有条件判断,没有循环 存储过程带上流程控制语句(if while) 1.2 存储过程特点 1)执行效率非常快!存储过程 ...
- MySQL存储过程、触发器 小例子
一.存储过程 语法: CREATE PROCEDURE([[IN |OUT |INOUT ] 参数名 数据类形...]) BEGIN ... END 参数: IN 输入参数 表示该参数的值必须在调用存 ...
- MySQL存储过程及触发器
一.存储过程 存储过程的基本格式如下: -- 声明结束符 -- 创建存储过程 DELIMITER $ -- 声明存储过程的结束符 CREATE PROCEDURE pro_test() --存储过程名 ...
- oracle 之索引,同义词 ,关键词,视图 ,存储过程,函数,触发器
--创建索引 关键词 index create[unique] index index_name on table_name(column_name [,column_name…]) [tablesp ...
随机推荐
- Java八大排序之插入排序
插入排序 也可叫直接插入排序,该算法的思路是:初始可认为文件中的第1个记录已排好序,然后将第2个到第n个记录依次插入到已排序的记录组成的文件中. 步骤: 假设有一组数组为(数组下标0—n-1): ar ...
- javaConfig下的springmvc配置
javaConfig下的springmvc配置 一.静态资源过滤 XML的配置 <mvc:resources mapping="/**" location="/&q ...
- [LeetCode] 767. Reorganize String 重构字符串
Given a string S, check if the letters can be rearranged so that two characters that are adjacent to ...
- [LeetCode] 289. Game of Life 生命游戏
According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellul ...
- window环境下的oracle错误error: 0x7e的解决方法
今天连接一个Win2008 Server服务端上的一个oracle出现了下面的这些错误 LoadLibraryFromPath: FQ Dll C:\Windows\system\oci.dll is ...
- 转 A 、B两张表,找出ID字段中,存在A表,但是不存在B表的数据
A.B两张表,找出ID字段中,存在A表,但是不存在B表的数据,A表总共13W数据,去重后大约3万条数据,B表有2W条数据,且B表的ID有索引. 方法一 使用not in,容易理解,效率低. selec ...
- 第23课 优先选用make系列函数
一. make系列函数 (一)三个make函数 1. std::make_shared:用于创建shared_ptr.GCC编译器中,其内部是通过调用std::allocate_shared来实现的. ...
- Jenkins使用过程中遇到的问题
1./usr/local/jdk1.8.0_191/ is not a directory on the Jenkins master (but perhaps it exists on some a ...
- 大话设计模式Python实现-代理模式
代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = ...
- Spring @ContextConfiguration注解
原文地址:https://www.cnblogs.com/bihanghang/p/10023759.html @ContextConfiguration这个注解通常与@RunWith(SpringJ ...