创建MySQL存储过程时需要`definer`吗?

不,创建存储过程时,定义器部分不是必需的。当您要创建定义器时使用它。

从MySQL.user表中检查所有用户和主机-

mysql> select user,host from mysql.user;

以下是输出-

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| Manish           | %         |
| User2            | %         |
| mysql.infoschema | %         |
| mysql.session    | %         |
| mysql.sys        | %         |
| root             | %         |
| Adam Smith       | localhost |
| User1            | localhost |
| am               | localhost |
+------------------+-----------+
9 rows in set (0.03 sec)

在这里,让我们创建一个名为Adam Smith的定义器。创建存储过程的查询如下-

mysql> delimiter //
mysql> CREATE DEFINER = 'Adam Smith'@'localhost' procedure Sp_Definer()
   -> begin
   -> select 'Hello MySQL';
   -> end;
   -> //
mysql> delimiter ;

使用CALL命令调用存储过程。语法如下-

CALL yourStoredProcedureName();

调用上面的存储过程。

mysql> call Sp_Definer();

以下是输出。

+-------------+
| Hello MySQL |
+-------------+
| Hello MySQL |
+-------------+
1 row in set (0.00 sec)