Các 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à kích hoạt trong đó bạn phải xác định nhiều câu lệnh. Bạn định nghĩa một dấu phân cách khác nhau $$
được sử dụng để xác định kết thúc 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ởi mỗi ;
. Theo 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 mysql
máy khách dòng lệnh (và một số máy khách khác) và không phải là một tính năng ngôn ngữ MySQL thông thường. Sẽ không hiệu quả nếu bạn cố chuyển nó qua API ngôn ngữ lập trình cho MySQL. Một số khách hàng khác như PHPMyAdmin có các phương thức khác để chỉ định một dấu phân cách không mặc định.
Thí 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 ;
Cố gắng sử dụng DELIMITER
với một máy 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ó một lỗi trong cú pháp SQL của bạn; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn để biết đúng cú pháp để sử dụng gần 'DELIMITER $$' ở dòng 1