mysql存储过程与函数

存储过程下载  demo

  1. mysql> delimiter // -- 这里//为修改默认分隔符;
  2.  
  3. mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
  4. -> BEGIN
  5. -> SELECT COUNT(*) INTO param1 FROM t;
  6. -> END//
  7. Query OK, 0 rows affected (0.00 sec)
  8.  
  9. mysql> delimiter ; // -- 改回来这里的默认分隔符为;

这里调用试用call

  1. mysql> CALL simpleproc(@a);
  2. mysql> select @a;

函数demo

参数没有输入输出参数

  1. mysql> CREATE FUNCTION hello (s CHAR(20))
  2. mysql> RETURNS CHAR(50) DETERMINISTIC
  3. -> RETURN CONCAT(‘Hello, ‘,s,‘!‘);

这里调用试用 select,和普通函数一样了

  1. mysql> SELECT hello(‘world‘);
  2. +----------------+
  3. | hello(‘world‘) |
  4. +----------------+
  5. | Hello, world! |
  6. +----------------+

变量的使用

  1. declare last_month_start DATE;
  2. DECLARE my_sql INT DEFAULT 10 ;
  3. set var_name = 2;

流程控制

  1. CREATE DEFINER=`root`@`localhost` PROCEDURE `student_insert`()
  2. BEGIN
  3. set @x=0;
  4. ins :LOOP
  5. set @x = @x +1;
  6. if @x=100 then
  7. leave ins;
  8. end if;
  9. insert into student (stuname) values (CONCAT("name",@x));
  10. END LOOP ins;
  11. END
  12.  
  13. CREATE DEFINER=`root`@`localhost` PROCEDURE `student_insert2`()
  14. BEGIN
  15. set @x=100;
  16. ins :LOOP
  17. set @x = @x +1;
  18. if @x=120 then
  19. leave ins;
  20. elseif mod(@x,2) = 0 then
  21. iterate ins;
  22. end if;
  23. insert into student (stuname) values (CONCAT("name",@x));
  24. END LOOP ins;
  25. END
  26.  
  27. CREATE DEFINER=`root`@`localhost` PROCEDURE `loop_demo`()
  28. BEGIN
  29. set @x=1 ,@x1=1;
  30. repeat
  31. set @x = @x +1;
  32. until @x > 0 end repeat;
  33.  
  34. while @x1 < 2 do
  35. set @x1=@x1+1;
  36. end while;
  37. END
游标的使用
  1. CREATE DEFINER=`root`@`localhost` PROCEDURE `cursor_demo`()
  2. BEGIN
  3. declare i_stuid int;
  4. declare i_stuname varchar(20);
  5. declare cur_stu cursor for select stuid,stuname from student;
  6. declare exit handler for not found close cur_stu;
  7.  
  8. set @x1 = 0;
  9. set @x2 = 0;
  10.  
  11. open cur_stu;
  12.  
  13. repeat
  14. fetch cur_stu into i_stuid,i_stuname;
  15. select i_stuid,i_stuname;
  16. until 0 end repeat;
  17.  
  18. close cur_stu;
  19. END
  20.  
  21. CREATE DEFINER=`root`@`localhost` PROCEDURE `cursor_demo3`()
  22. BEGIN
  23. DECLARE done INT DEFAULT 0;
  24. DECLARE a CHAR(16);
  25. DECLARE b,c INT;
  26. DECLARE cur1 CURSOR FOR SELECT stuname,stuid FROM `student`;
  27. DECLARE cur2 CURSOR FOR SELECT subid FROM `subject`;
  28. DECLARE CONTINUE HANDLER FOR SQLSTATE 02000 SET done = 1;
  29.  
  30. OPEN cur1;
  31. OPEN cur2;
  32.  
  33. REPEAT
  34. FETCH cur1 INTO a, b;
  35. FETCH cur2 INTO c;
  36. IF NOT done THEN
  37. SELECT a,b,c;
  38. END IF;
  39. UNTIL done END REPEAT;
  40.  
  41. CLOSE cur1;
  42. CLOSE cur2;
  43. END
触发器

必须建立在真实表之上,适合一些初始化数据

  1. CREATE TABLE test1(a1 INT);
  2. CREATE TABLE test2(a2 INT);
  3. CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
  4. CREATE TABLE test4(
  5. a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  6. b4 INT DEFAULT 0
  7. );
  8.  
  9. DELIMITER |
  10.  
  11. CREATE TRIGGER testref BEFORE INSERT ON test1
  12. FOR EACH ROW BEGIN
  13. INSERT INTO test2 SET a2 = NEW.a1;
  14. DELETE FROM test3 WHERE a3 = NEW.a1;
  15. UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
  16. END
  17. |
  18.  
  19. DELIMITER ;
  20.  
  21. INSERT INTO test3 (a3) VALUES
  22. (NULL), (NULL), (NULL), (NULL), (NULL),
  23. (NULL), (NULL), (NULL), (NULL), (NULL);
  24.  
  25. INSERT INTO test4 (a4) VALUES
  26. (0), (0), (0), (0), (0), (0), (0), (0), (0), (0);
查看索引
  1. show index from table

mysql 存储过程 函数 触发器的更多相关文章

  1. mysql存储过程和触发器的应用

    ***********[mysql 存储过程和触发器 -- 别安驹]********************* 1.什么情况下使用存储过程? 完成一些比较麻烦的逻辑,比如多表在mysql端的cpu很空 ...

  2. 查看SQL SERVER 加密存储过程,函数,触发器,视图

    原文:查看SQL SERVER 加密存储过程,函数,触发器,视图 create  PROCEDURE sp_decrypt(@objectname varchar(50))ASbeginset noc ...

  3. MySQL 存储过程 函数 routine 权限

    MySQL 存储过程 函数 routine 权限 Table of Contents 1. mysql存储过程/函数权限 1.1. 相关对象操作权限检查 1.2. 执行权限 1 mysql存储过程/函 ...

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

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

  5. mysql存储过程和触发器

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

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

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

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

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

  8. MySQL存储过程及触发器

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

  9. oracle 之索引,同义词 ,关键词,视图 ,存储过程,函数,触发器

    --创建索引 关键词 index create[unique] index index_name on table_name(column_name [,column_name…]) [tablesp ...

随机推荐

  1. Java八大排序之插入排序

    插入排序 也可叫直接插入排序,该算法的思路是:初始可认为文件中的第1个记录已排好序,然后将第2个到第n个记录依次插入到已排序的记录组成的文件中. 步骤: 假设有一组数组为(数组下标0—n-1): ar ...

  2. javaConfig下的springmvc配置

    javaConfig下的springmvc配置 一.静态资源过滤 XML的配置 <mvc:resources mapping="/**" location="/&q ...

  3. [LeetCode] 767. Reorganize String 重构字符串

    Given a string S, check if the letters can be rearranged so that two characters that are adjacent to ...

  4. [LeetCode] 289. Game of Life 生命游戏

    According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellul ...

  5. window环境下的oracle错误error: 0x7e的解决方法

    今天连接一个Win2008 Server服务端上的一个oracle出现了下面的这些错误 LoadLibraryFromPath: FQ Dll C:\Windows\system\oci.dll is ...

  6. 转 A 、B两张表,找出ID字段中,存在A表,但是不存在B表的数据

    A.B两张表,找出ID字段中,存在A表,但是不存在B表的数据,A表总共13W数据,去重后大约3万条数据,B表有2W条数据,且B表的ID有索引. 方法一 使用not in,容易理解,效率低. selec ...

  7. 第23课 优先选用make系列函数

    一. make系列函数 (一)三个make函数 1. std::make_shared:用于创建shared_ptr.GCC编译器中,其内部是通过调用std::allocate_shared来实现的. ...

  8. Jenkins使用过程中遇到的问题

    1./usr/local/jdk1.8.0_191/ is not a directory on the Jenkins master (but perhaps it exists on some a ...

  9. 大话设计模式Python实现-代理模式

    代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = ...

  10. Spring @ContextConfiguration注解

    原文地址:https://www.cnblogs.com/bihanghang/p/10023759.html @ContextConfiguration这个注解通常与@RunWith(SpringJ ...