Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL:Làm cách nào để sử dụng dấu phân cách trong trình kích hoạt?

Phần 1

Các dấu phân cách được sử dụng cho các đối tượng nguồn như thủ tục / chức năng được lưu trữ, trình kích hoạt hoặc sự kiện. Tất cả các đối tượng này có thể có nội dung - mã trong mệnh đề BEGIN ... END.

Tất cả các câu lệnh trong tập lệnh MySQL phải được kết thúc bằng dấu phân cách, mặc định là ';'. Nhưng phải làm gì nếu đối tượng nguồn có nội dung với một số câu lệnh, e, g:

INSERT INTO table1 VALUES(1);

CREATE PROCEDURE procedure1()
BEGIN
  SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
  PREPARE stmt2 FROM @s;
  SET @a = 6;
  SET @b = 8;
  EXECUTE stmt2 USING @a, @b;
END;

INSERT INTO table1 VALUES(2);

Có bao nhiêu tiểu bang? 3 hoặc 8? Câu trả lời là ba, bởi vì script có hai câu lệnh INSERT và một câu lệnh CREATE PROCEDURE. Như bạn thấy, TẠO THỦ TỤC cũng có một số câu lệnh nội bộ; chúng ta nên nói với máy khách MySQL rằng tất cả các câu lệnh này (bên trong BEGIN ... END) - là một phần của MỘT câu lệnh; chúng ta có thể làm điều đó với sự trợ giúp của các dấu phân cách:

INSERT INTO table1 VALUES(1);

DELIMITER $$

CREATE PROCEDURE procedure1()
BEGIN
  SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
  PREPARE stmt2 FROM @s;
  SET @a = 6;
  SET @b = 8;
  EXECUTE stmt2 USING @a, @b;
END$$

DELIMITER ;

INSERT INTO table1 VALUES(2);

Lưu ý, khi trình kích hoạt của bạn không có mệnh đề BEGIN ... END, các dấu phân cách có thể bị bỏ qua.

Phần 2

Không có dấu phân cách, câu lệnh sẽ được phân tích cú pháp thành -

CREATE PROCEDURE procedure1()
BEGIN
  SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';

thay vì -

CREATE PROCEDURE procedure1()
BEGIN
  SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
  PREPARE stmt2 FROM @s;
  SET @a = 6;
  SET @b = 8;
  EXECUTE stmt2 USING @a, @b;
END


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để tạo người dùng MySQL chỉ đọc?

  2. Làm thế nào để có được kích thước của cơ sở dữ liệu MySQL?

  3. Giỏ hàng và quản lý kho

  4. SQL để kiểm tra xem cơ sở dữ liệu có trống không (không có bảng)

  5. Truy vấn MySQL với giới hạn và bù đắp lớn sẽ mất vĩnh viễn