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
的作用,其实很简单,他就起到一个标识命令结束符的作用。
我们默认使用分号;
作为我们的命令结束符,但在存储过程中,你会有涉及多非常多条命令,比如SELECT
、INSERT
、UPDATE
等等,如果你使用默认的命令结束符,那么在你执行第一条命令结束后,存储过程就结束了,这显然不是我们希望的结果。
那么使用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教程的视图、索引、存储过程和触发器