Sự cố với điều này:
DELIMITER $$
DROP PROCEDURE IF EXISTS my_test;
CREATE PROCEDURE my_test() ...
có phải là MySQL không nhìn thấy dấu chấm phẩy ở cuối DROP PROCEDURE
không dòng câu lệnh ở cuối câu lệnh. Điều này là do dòng trước đó đã nói với MySQL rằng dấu chấm dứt câu lệnh là một cái gì đó khác với dấu chấm phẩy. Bạn đã nói với MySQL rằng các câu lệnh sẽ được kết thúc bằng hai ký hiệu đô la. Vì vậy, MySQL đang đọc DROP PROCEDURE
dòng, tìm kiếm dấu chấm dứt câu lệnh. Và toàn bộ blob mà nó đọc KHÔNG phải là một câu lệnh MySQL hợp lệ, nó tạo ra lỗi cú pháp.
Cách khắc phục:di chuyển DROP PROCEDURE
dòng trước DELIMITER $$
đường kẻ; hoặc chấm dứt DROP PROCEDURE
câu lệnh có dấu phân cách được chỉ định thay vì dấu chấm phẩy.
Vấn đề thứ hai bạn báo cáo là lỗi cú pháp. Điều đó xảy ra vì MySQL không nhận ra IF
như phần đầu của một câu lệnh SQL hợp lệ.
IF
tuyên bố có giá trị chỉ trong ngữ cảnh của một chương trình được lưu trữ MySQL (ví dụ:trong một CREATE PROCEDURE
tuyên bố.)
Cách khắc phục:Sử dụng IF
chỉ trong ngữ cảnh của một chương trình được lưu trữ MySQL.
Vấn đề thứ ba bạn báo cáo cũng là lỗi cú pháp. Điều đó xảy ra vì bạn không có cú pháp hợp lệ cho SET
tuyên bố; Cú pháp MySQL cho SET
câu lệnh để gán giá trị cho biến người dùng là:
SET @uservar = expr
MySQL đang mong đợi một biểu thức sau dấu bằng. MySQL thì không mong đợi một câu lệnh SQL.
Để gán giá trị cho một biến người dùng do kết quả từ SELECT
, hãy thực hiện bài tập trong câu lệnh SELECT, ví dụ:
SELECT @Count := Count(id) FROM `tbl_object_users` WHERE `username`='jp2code'
Lưu ý rằng toán tử gán bên trong SELECT
câu lệnh là :=
(dấu hai chấm bằng), không chỉ =
.