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)
-
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)
-
*。*の付与は、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)