欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL存储过程的创建、调用、修改、查询、删除

程序员文章站 2024-03-20 10:38:00
...

1 创建

首先我们创建一个简单的测试表tt

CREATE TABLE tt(
	num int
);

插入几个测试数据

INSERT INTO tt(num) VALUE(1),(3),(9);

SELECT * FROM tt;
+------+
| num  |
+------+
|    1 |
|    3 |
|    9 |
+------+

1.1 无参存储过程

创建一个简单的无参存储过程的实例

DELIMITER //

CREATE PROCEDURE p1()
BEGIN
	SELECT * FROM tt;
END //

DELIMITER ;

这里你可能会不明白DELIMITER的作用,其实很简单,他就起到一个标识命令结束符的作用

我们默认使用分号;作为我们的命令结束符,但在存储过程中,你会有涉及多非常多条命令,比如SELECTINSERTUPDATE等等,如果你使用默认的命令结束符,那么在你执行第一条命令结束后,存储过程就结束了,这显然不是我们希望的结果。

那么使用DELIMITER就可以*命名我们的命令结束符了,一般会使用双正斜杠//或者双美元符$$来作为我们的命令结束符。应用一下:

mysql> DELIMITER //

mysql> INSERT INTO tt(num) VALUE(11);
    -> SELECT * FROM tt//
Query OK, 1 row affected (0.01 sec)

+------+
| num  |
+------+
|    1 |
|    3 |
|    9 |
|   11 |
+------+

这里我们就可以惊喜的看到我们一次就执行了插入、查询两条命令。
现在我们回头看到我们的实例

DELIMITER //

CREATE PROCEDURE p1()
BEGIN
	SELECT * FROM tt;
END //

DELIMITER ;

这里使用DELIMITER命名了//作为命令结束符,最后再用DELIMITER回到我们熟悉的命令结束符;

1.2 有参存储过程

DELIMITER //

CREATE PROCEDURE p2(new_num INT)
BEGIN
	INSERT INTO tt(num) VALUE(new_num);
	SELECT * FROM tt;
END//

DELIMITER ;

可以把存储过程看成一个函数,在p2()括号内添加参数名和参数类型

2 调用

调用很简单,使用CALL

CALL p1()     #无参的存储过程;
CALL p2(17)   #有参的存储过程;

可以看到,调用方法跟函数一样,另外对于无参的存储过程,可以直接使用存储过程名称,即

CALL p1;

3 修改

要想修改存储过程的内容或名称,需要先删除原先的存储过程在重新创建

4 查询

查询所有的存储过程

SHOW PROCEDURE STATUS;

当然我们也可以添加使用LIKE子句查找特定存储过程

SHOW PROCEDUrE STATUS LIKE 'p1';

另外,如果要查看存储过程创建时的定义的话:

SHOW CREATE PROCEDURE p1; 

5 删除

DROP PROCEDURE p1;

6 参考

C语言中文网中MYSQL教程的视图、索引、存储过程和触发器