MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLストアドプロシージャDEFINER=`root` @`% `がローカルホストで機能していませんか?


まず、ホストを確認する必要があります。ホストは「localhost」または「%」にすることができます。ホストのユーザーアカウントの存在を確認します-

mysql> select user,host from MySQL.user;

これにより、次の出力が生成されます-

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| Bob              | %         |
| User2            | %         |
| mysql.infoschema | %         |
| mysql.session    | %         |
| mysql.sys        | %         |
| root             | %         |
| @UserName@       | localhost |
| Adam Smith       | localhost |
| David            | localhost |
| James            | localhost |
| John             | localhost |
| John Doe         | localhost |
| User1            | localhost |
| am               | localhost |
| hbstudent        | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
+------------------+-----------+
17 rows in set (0.00 sec)

次に、ユーザーBobの定義者を変更します。ホストは「%」です。以下は、definer-

を使用してストアドプロシージャを作成するためのクエリです。
mysql> DELIMITER //
   mysql> CREATE DEFINER=`Bob`@`%` PROCEDURE `Message`()
      BEGIN
        select "Hello World";
        END
        //
   Query OK, 0 rows affected (0.14 sec)
mysql> DELIMITER ;

次に、CALLコマンドを使用してストアドプロシージャを呼び出します-

mysql> call `Message`();

これにより、次の出力が生成されます-

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

  1. MySQLストアドプロシージャで数学演算を実行しますか?

    ストアドプロシージャを作成しましょう。ここでは、量*量を計算しています。つまり、数学演算を実装しています- mysql> delimiter // mysql> create procedure calculation_proc(amount int,quantity int)      begin      select amount,quantity,(amount*quantity) as Total;      end      // Query OK,

  2. MySQLストアドプロシージャのテーブルにデータを挿入しますか?

    ストアドプロシージャのテーブルに挿入するための構文は次のとおりです- create procedure yourProcedureName(OptionalParameter)    begin    insert into yourTableName() values(yourValue1,yourValue2,...N); end 上記の構文を理解するために、最初にテーブルを作成しましょう- mysql> create table DemoTable1928    (    Id int NOT NUL