Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL:Bagaimana cara menggunakan pembatas di pemicu?

Bagian 1

Pembatas digunakan untuk objek sumber seperti prosedur/fungsi tersimpan, pemicu, atau peristiwa. Semua objek ini mungkin memiliki badan - kode dalam klausa BEGIN...END.

Semua pernyataan dalam skrip MySQL harus diakhiri dengan pembatas, defaultnya adalah ';'. Tetapi apa yang harus dilakukan jika objek sumber memiliki tubuh dengan beberapa pernyataan, mis:

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);

Berapa banyak stateman? 3 atau 8? Jawabannya adalah tiga, karena skrip memiliki dua pernyataan INSERT dan satu CREATE PROCEDURE. Seperti yang Anda lihat, CREATE PROCEDURE juga memiliki beberapa pernyataan internal; kita harus mengatakan kepada klien MySQL bahwa semua pernyataan ini (di dalam BEGIN...END) - adalah bagian dari SATU pernyataan; kita bisa melakukannya dengan bantuan pembatas:

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);

Perhatikan, bila pemicu Anda tidak memiliki klausa BEGIN...END, pembatas dapat dihilangkan.

Bagian 2

Tanpa pembatas, pernyataan akan diuraikan sebagai -

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

bukannya -

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. Mencari ketersediaan dengan MySQL (dan PHP)?

  2. Saat menggunakan Entity Framework dengan MySQL, karakter Unicode diganti dengan karakter dasar

  3. Hapus baris X pertama dari database

  4. MySQL:#126 - File kunci salah untuk tabel

  5. MySQL:bidang unik perlu menjadi indeks?