Dấu phân cách khác với ;
mặc định thường được sử dụng khi xác định hàm, thủ tục được lưu trữ và trình kích hoạt trong đó bạn phải xác định nhiều câu lệnh. Bạn xác định một dấu phân tách khác như $$
được sử dụng để xác định phần cuối của toàn bộ thủ tục, nhưng bên trong nó, các câu lệnh riêng lẻ được kết thúc bằng ;
. Bằng cách đó, khi mã được chạy trong mysql
máy khách, máy khách có thể cho biết toàn bộ thủ tục kết thúc ở đâu và thực thi nó như một đơn vị thay vì thực thi các câu lệnh riêng lẻ bên trong.
Lưu ý rằng DELIMITER
từ khóa là một chức năng của dòng lệnh mysql
chỉ ứng dụng khách (và một số ứng dụng khách khác) và không phải là tính năng ngôn ngữ MySQL thông thường. Nó sẽ không hoạt động nếu bạn cố gắng chuyển nó qua một API ngôn ngữ lập trình đến MySQL. Một số ứng dụng khách khác như PHPMyAdmin có các phương thức khác để chỉ định dấu phân cách không mặc định.
Ví dụ:
DELIMITER $$
/* This is a complete statement, not part of the procedure, so use the custom delimiter $$ */
DROP PROCEDURE my_procedure$$
/* Now start the procedure code */
CREATE PROCEDURE my_procedure ()
BEGIN
/* Inside the procedure, individual statements terminate with ; */
CREATE TABLE tablea (
col1 INT,
col2 INT
);
INSERT INTO tablea
SELECT * FROM table1;
CREATE TABLE tableb (
col1 INT,
col2 INT
);
INSERT INTO tableb
SELECT * FROM table2;
/* whole procedure ends with the custom delimiter */
END$$
/* Finally, reset the delimiter to the default ; */
DELIMITER ;
Đang cố gắng sử dụng DELIMITER
với một ứng dụng khách không hỗ trợ nó sẽ khiến nó được gửi đến máy chủ, điều này sẽ báo lỗi cú pháp. Ví dụ:sử dụng PHP và MySQLi:
$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$result = $mysqli->query('DELIMITER $$');
echo $mysqli->error;
Lỗi với:
Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MySQL của bạn để biết cú pháp phù hợp để sử dụng gần 'DELIMITER $$' tại dòng 1