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

MySQLは、ストアドプロシージャが作成された時点で環境を保持していますか?


実際、MySQLは、ストアドプロシージャが作成された時点で環境を保持します。文字列を連結するために2本のバーを使用している例に従うことで理解できます。これは、SQLモードがansiである場合にのみ有効です。ただし、SQLモードを非ANSIに変更した場合でも、手順は元の設定が引き続き真であるかのように機能します。

mysql> Set sql_mode = 'ansi'//
Query OK, 0 rows affected, 1 warning (0.14 sec)

mysql> Create Procedure Con_string()
    -> SELECT 'a'||'b'//
Query OK, 0 rows affected (0.12 sec)
mysql> Call Con_string ();
+----------+
| 'a'||'b' |
+----------+
| ab       |
+----------+
1 row in set (0.05 sec)

Query OK, 0 rows affected (0.05 sec)

mysql> Set sql_mode = '';
Query OK, 0 rows affected (0.00 sec)

mysql> Call Con_string();
+----------+
| 'a'||'b' |
+----------+
| ab       |
+----------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

上記の結果セットは、SQLモードを非ansiに変更した後でも、プロシージャCon_string()がSQLモードがまだansiである場合と同じ結果を生成していることを示しています。ただし、SQLモードを非ANSIに変更したため、新しいプロシージャは2つのバーを受け入れません。

mysql> create procedure Con_string1()
    -> Select 'a'||'b'//
Query OK, 0 rows affected (0.02 sec)

mysql> Call Con_string1()//
+----------+
| 'a'||'b' |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

Query OK, 0 rows affected, 2 warnings (0.00 sec)

  1. MySQLストアドプロシージャで条件を設定する

    ストアドプロシージャに条件を設定するには、MySQLでIF...ELSEを使用します。以下は、if-else-の構文です。 IF yourCondition then       yourStatement1,  ELSE           yourStatement2,  END IF; 上記の構文をストアドプロシージャに実装しましょう- mysql> DELIMITER // mysql> CREATE PROCEDURE IF_ELSE_DEMO(IN value int)

  2. *。*の付与は、MySQLでの付与後に作成されたデータベースに適用されますか?

    はい、これはグローバルな特権です。まずユーザーを作成しましょう- mysql> CREATE USER 'Jace'@'localhost' IDENTIFIED BY 'Jace123'; Query OK, 0 rows affected (0.67 sec) *。*を使用してグローバル権限を付与するクエリは次のとおりです: mysql> GRANT SELECT ON *.* TO 'Jace'@'localhost'; Query OK, 0 rows affected (0.58 sec)