美文网首页
存储过程

存储过程

作者: Ming_0612 | 来源:发表于2018-03-14 23:06 被阅读0次
image.png
image.png
image.png
image.png
image.png
mysql> create procedure sp1() select version();
    -> //
Query OK, 0 rows affected (0.00 sec)
mysql> call sp1;//sp1()也可以的
    -> //
+------------+
| version()  |
+------------+
| 5.7.21-log |
+------------+
1 row in set (0.00 sec)
image.png

ps 不能修改过程体,要修改过程体必须先删除存储过程,再重建


mysql> drop procedure removeUserById;
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter //
mysql> create procedure removeUserById(in p_id int unsigned)
    -> begin
    -> delete from users where id=p_id;
    -> end
    -> //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> call removeUserById(3);
Query OK, 1 row affected (0.02 sec)

mysql变量的术语分类:

1.用户变量:以"@"开始,形式为"@变量名"

用户变量跟mysql客户端是绑定的,设置的变量,只对当前用户使用的客户端生效

2.全局变量:定义时,以如下两种形式出现,set GLOBAL 变量名 或者 set @@global.变量名

对所有客户端生效。只有具有super权限才可以设置全局变量

3.会话变量:只对连接的客户端有效。

4.局部变量:作用范围在begin到end语句块之间。在该语句块里设置的变量

declare语句专门用于定义局部变量。set语句是设置不同类型的变量,包括会话变量和全局变量

mysql> delimiter //
mysql> create procedure removeUserAndReturnUserNums(in p_id int unsigned,out userNums int unsigned)
    -> begin
    -> delete from users where id=p_id;
    -> select count(id) from users into userNums;
    -> end
    -> //
Query OK, 0 rows affected (0.00 sec)
mysql> call removeUserAndReturnUserNums(16,@nums);
Query OK, 1 row affected (0.02 sec)

mysql> select@nums;
+-------+
| @nums |
+-------+
|    16 |
+-------+
1 row in set (0.00 sec)

row_count()函数,记录表中发生变化的条数。

mysql> insert test(first_name)values('a'),('b'),('c');
Query OK, 3 rows affected (0.03 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select row_count();
+-------------+
| row_count() |
+-------------+
|           3 |
+-------------+
1 row in set (0.00 sec)

创建带有多个out类型参数的存储过程
下面的代码块是为了删除年龄为x的数据,然后输出删除了多少条和输出还剩下多少条

mysql> delimiter //
mysql> create procedure removeUserByAgeAndReturnInfos(in p_age smallint unsigned,out deleteUsers smallint unsigned,out userCounts smallint unsigned)
    -> begin
    -> delete from users where age=p_age;
    -> select row_count() into deleteUsers;
    -> select count(id) from users into userCounts;
    -> end
    -> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> select*from users;
+----+----------+----------------------------------+------+------+
| id | username | password                         | age  | sex  |
+----+----------+----------------------------------+------+------+
|  1 | A        | 7fc56270e7a70fa81a5935b72eacbe29 |   20 |    0 |
|  2 | B        | 9d5ed678fe57bcca610140957afab571 |   23 |    1 |
|  4 | D        | f623e75af30e62bbd73d6df5b50bb7b5 |   24 |    1 |
|  5 | E        | 3a3ea00cfc35332cedf6e5e9a32e94da |   24 |    0 |
|  6 | F        | 800618943025315f869e4e1f09471012 |   23 |    0 |
|  7 | G        | dfcf28d0734569a6a693bc8194de62bf |   22 |    0 |
|  8 | H        | c1d9f50f86825a1a2302ec2449c17196 |   23 |    0 |
|  9 | I        | dd7536794b63bf90eccfd37f9b147d7f |   23 |    0 |
| 10 | J        | ff44570aca8241914870afbc310cdb85 |   22 |    1 |
| 11 | K        | a5f3c6a11b03839d46af9fb43c97c188 |   22 |    1 |
| 12 | L        | d20caec3b48a1eef164cb4ca81ba2587 |   22 |    0 |
| 13 | M        | 69691c7bdcc3ce6d5d8a1361f22d04ac |   24 |    1 |
| 14 | N        | 8d9c307cb7f3c4a32822a51922d1ceaa |   21 |    0 |
| 15 | O        | f186217753c37b9b9f958d906208506e |   20 |    0 |
| 17 | Q        | f09564c9ca56850d4cd6b3319e541aee |   24 |    1 |
| 18 | R        | e1e1d3d40573127e9ee0480caf1283d6 |   24 |    1 |
+----+----------+----------------------------------+------+------+
16 rows in set (0.00 sec)
mysql> select count(id) from users where age=23;
+-----------+
| count(id) |
+-----------+
|         4 |
+-----------+
1 row in set (0.00 sec)

mysql> call removeUserByAgeAndReturnInfos(23,@a,@b);
Query OK, 1 row affected (0.03 sec)

mysql> select @a,@b;
+------+------+
| @a   | @b   |
+------+------+
|    4 |   12 |
+------+------+
1 row in set (0.00 sec)
image.png

相关文章

  • Mysql存储过程

    阅读目录:MySQL存储过程_创建-调用-参数 存储过程:SQL中的“脚本” 创建存储过程 调用存储过程 存储过程...

  • MySQL批量添加数据

    创建存储过程 执行存储过程 删除存储过程

  • 17 存储过程

    过程: 函数: 过程是没有返回值的函数 存储过程: 存储过程语法 存储过程1--创建简单的存储过程 存储过程2--...

  • 存储过程

    详见存储过程详解 创建存储过程 使用存储过程 存储过程简介 什么是存储过程:存储过程可以说是一个记录集吧,它是由一...

  • 存储过程与函数

    存储过程与函数存储过程的定义存储过程的创建存储过程的操作自定义函数 存储过程与函数 存储过程的定义 运行效率高 降...

  • 存储过程

    ps 不能修改过程体,要修改过程体必须先删除存储过程,再重建 mysql变量的术语分类: 1.用户变量:以"@"开...

  • 存储过程

    存储过程 过程,可以简单理解为是一个函数。 函数和过程的区别:函数总是向调用者返回数据,而过程没有数据返回。 Or...

  • 存储过程

    存储过程(Stored Procedure)是一个可编程的函数,是为了完成特定功能的SQL语句集;创建的存储过程保...

  • 存储过程

    一.基础语法 说明 delimiter // 一般情况下MYSQL以;结尾表示确认输入并执行语句,但在存储过程中;...

  • 存储过程

    存储过程:带有逻辑的sql语句。之前的sql没有条件判断,循环。 存储过程带上流程控制语句(if,while)。 ...

网友评论

      本文标题:存储过程

      本文链接:https://www.haomeiwen.com/subject/tvhwfftx.html