Computer >> Máy Tính >  >> Lập trình >> MySQL

Có bắt buộc phải có `definer` khi tạo một thủ tục được lưu trữ trong MySQL không?

Không, phần xác định không bắt buộc khi bạn đang tạo một thủ tục được lưu trữ. Nó được sử dụng khi bạn muốn tạo một trình định nghĩa.

Kiểm tra tất cả người dùng và máy chủ từ bảng MySQL.user -

mysql> select user,host from mysql.user;

Sau đây là kết quả -

+------------------+-----------+
| 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)

Ở đây, chúng ta hãy tạo một trình định nghĩa là Adam Smith. Truy vấn để tạo một thủ tục được lưu trữ như sau -

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 ;

Gọi thủ tục đã lưu bằng lệnh CALL. Cú pháp như sau -

CALL yourStoredProcedureName();

Gọi thủ tục được lưu trữ ở trên.

mysql> call Sp_Definer();

Sau đây là kết quả.

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