Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

MySQL có bảo toàn môi trường tại thời điểm tạo stored procedure không?

Có, MySQL bảo toàn môi trường (environment) tại thời điểm tạo stored procedure. Ví dụ: dùng || để nối chuỗi - chỉ hợp lệ khi sql_mode='ansi'. Nếu đổi sang non-ansi sau khi tạo, thủ tục cũ vẫn chạy như cũ.

Ví dụ

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

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

mysql> CALL Con_string();  -- vẫn chạy được
+----------+
| 'a'||'b' |
+----------+
| ab       |
+----------+

Nhưng thủ tục mới tạo sau khi đổi mode sẽ không chấp nhận ||:

mysql> CREATE PROCEDURE Con_string1() SELECT 'a'||'b';
Query OK, 0 rows affected (0.02 sec)
mysql> CALL Con_string1();
+----------+
| 'a'||'b' |
+----------+
| 0        |   -- || được hiểu là OR logic, 'a' và 'b' đều true → 1, nhưng hiển thị 0? Có thể do cảnh báo
+----------+