MySQL - DROP PROCEDURE 语句
MySQL DROP PROCEDURE 语句
存储过程是存储在 SQL 目录中的子例程,是 SQL 语句的片段。所有可以访问关系数据库(Java、Python、PHP 等)的应用程序都可以访问存储过程。
存储过程包含 IN 和 OUT 参数,或者两者兼有。如果您使用 SELECT 语句,它们可能会返回结果集。存储过程可以返回多个结果集。
您可以使用 DROP PROCEDURE 语句删除一个函数。
语法
以下是 DROP PROCEDURE 语句的语法 -
DROP PROCEDURE procedure_name
其中,procedure_name 是您需要删除的过程的名称。
示例
假设我们在数据库中创建了一个名为 Emp 的表,如下所示 -
CREATE TABLE Employee( Name VARCHAR(255), Salary INT NOT NULL, Location VARCHAR(255) );
假设我们创建了一个存储过程 myProcedure,它接受姓名、薪资和地点值,并将它们作为记录插入到上面创建的表中。
DELIMITER // Create procedure myProcedure ( IN name VARCHAR(30), IN sal INT, IN loc VARCHAR(45)) BEGIN INSERT INTO Employee(Name, Salary, Location) VALUES (name, sal, loc); END // DELIMITER ;
以同样的方式,以下步骤检索上面创建的表中的所有记录 -
DELIMITER // Create procedure retrieveRecords () BEGIN SELECT * FROM Dispatches; END //
您可以使用 SHOW PROCEDURE STATUS 语句验证数据库中的过程列表,如下所示 -
SHOW PROCEDURE STATUS WHERE db = 'test'\G;
输出
上述 mysql 查询将生成以下输出 -
************** 1. row ************** Db: test Name: myProcedure Type: PROCEDURE Definer: root@localhost Modified: 2023-12-05 15:19:39 Created: 2023-12-05 15:19:39 Security_type: DEFINER Comment: character_set_client: cp850 collation_connection: cp850_general_ci Database Collation: utf8mb4_0900_ai_ci ************** 2. row ************** Db: test Name: retrieveRecords Type: PROCEDURE Definer: root@localhost Modified: 2023-12-05 15:20:18 Created: 2023-12-05 15:20:18 Security_type: DEFINER Comment: character_set_client: cp850 collation_connection: cp850_general_ci Database Collation: utf8mb4_0900_ai_ci
以下查询将删除/丢弃上面创建的过程 -
DROP PROCEDURE myProcedure; DROP PROCEDURE retrieveRecords;
验证
由于我们已经删除了这两个过程。如果您再次验证过程列表,您将得到一个空集 -
SHOW PROCEDURE STATUS WHERE db = 'test'; Empty set (0.00 sec)
IF EXISTS 子句
如果您尝试删除一个不存在的过程,将生成如下所示的错误 -
DROP Procedure demo; ERROR 1305 (42000): FUNCTION test.demo does not exist
如果将 IF EXISTS 子句与 DROP PROCEDURE 语句一起使用(如下所示),则指定的过程将被删除,并且如果具有给定名称的过程不存在,则查询将被忽略。
DROP PROCEDURE IF EXISTS demo;