在建立 MySQL 儲存過程時是否需要 `definer`?


否,在建立儲存過程時,`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;
   -> //
Query OK, 0 rows affected (0.14 sec)
mysql> delimiter ;

使用 CALL 命令呼叫儲存過程。語法如下 −

CALL yourStoredProcedureName();

呼叫上述儲存過程。

mysql> call Sp_Definer();

以下是輸出。

+-------------+
| Hello MySQL |
+-------------+
| Hello MySQL |
+-------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)

更新於: 30-6 月 -2020

1 千次 + 檢視

開啟您的 職業生涯

完成課程獲得認證

立即開始
廣告
© . All rights reserved.