MySQL 存储过程

一、基础工作

1、创建数据库

mysql> create database school default character set utf8 collate utf8_general_ci;

2、创建表

#id   整型      主建    不能为空    自动增长
#name 字符型    长度50    不能为空
#age  整型      不能为空    默认值18

mysql> create table student(
    -> id int primary key not null auto_increment,
    -> name varchar(50) not null,
    -> age int not null default 18
    -> );
二、存储过程
(1)定义一个无参数存储过程

1、创建存储过程,批量创建10条记录

mysql> delimiter $$                   # 将语句的结束符号从分号;临时改为两个$$(可以是自定义)
mysql> create procedure insertdata()  # 创建存储过程
    -> begin 
    ->   declare i int default 1;   # 创建变量,初始值1
    ->     while i < 10 do            # 循环
    ->       insert into student (name,age) values (concat('tom',i),i);
    ->       set i = i+1;
    ->   end while;                 # 结束循环
    -> end                            
    -> $$

Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;                    # 将语句的结束符号恢复为分号

2、调用存储过程

call insertdata(); 

3、查看结果

mysql> select * from student;
+----+------+-----+
| id | name | age |
+----+------+-----+
|  1 | tom1 |   1 |
|  2 | tom2 |   2 |
|  3 | tom3 |   3 |
|  4 | tom4 |   4 |
|  5 | tom5 |   5 |
|  6 | tom6 |   6 |
|  7 | tom7 |   7 |
|  8 | tom8 |   8 |
|  9 | tom9 |   9 |
+----+------+-----+
9 rows in set (0.00 sec)
(2)定义一个带参数的存储过程(IN)

1、创建存储过程

mysql> delimiter $$
mysql> create procedure delete_data(in uid int)     # 定义一个参数uid
    -> begin
    ->   delete from student where id=uid;
    -> end
    -> $$

Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

2、调用存储过程,删除第5条记录

mysql> call delete_data(5);

3、查看数据库

mysql> select * from student;
+----+------+-----+
| id | name | age |
+----+------+-----+
|  1 | tom1 |   1 |
|  2 | tom2 |   2 |
|  3 | tom3 |   3 |
|  4 | tom4 |   4 |
|  6 | tom6 |   6 |
|  7 | tom7 |   7 |
|  8 | tom8 |   8 |
|  9 | tom9 |   9 |
+----+------+-----+
8 rows in set (0.00 sec)
(3)定义一个带参数的存储过程(OUT)

1、创建存储过程

mysql> delimiter $$
mysql> create procedure select_data(out average int)
    -> begin
    ->  select avg(age) into average from student;
    -> end
    -> $$

Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

2、调用,求平均值

mysql> call select_date(@average);

3、查看

mysql> select @average;
+----------+
| @average |
+----------+
|       15 |
+----------+
1 row in set (0.00 sec)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值