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

MySQL Trigger - Menyimpan SELECT dalam variabel

Anda dapat mendeklarasikan variabel lokal di pemicu MySQL, dengan DECLARE sintaks.

Ini contohnya:

DROP TABLE IF EXISTS foo;
CREATE TABLE FOO (
  i SERIAL PRIMARY KEY
);

DELIMITER //
DROP TRIGGER IF EXISTS bar //

CREATE TRIGGER bar AFTER INSERT ON foo
FOR EACH ROW BEGIN
  DECLARE x INT;
  SET x = NEW.i;
  SET @a = x; -- set user variable outside trigger
END//

DELIMITER ;

SET @a = 0;

SELECT @a; -- returns 0

INSERT INTO foo () VALUES ();

SELECT @a; -- returns 1, the value it got during the trigger

Saat Anda menetapkan nilai ke variabel, Anda harus memastikan bahwa kueri hanya mengembalikan satu nilai, bukan kumpulan baris atau kumpulan kolom. Misalnya, jika kueri Anda mengembalikan satu nilai dalam praktik, tidak apa-apa, tetapi segera setelah kueri mengembalikan lebih dari satu baris, Anda mendapatkan "ERROR 1242: Subquery returns more than 1 row ".

Anda dapat menggunakan LIMIT atau MAX() untuk memastikan bahwa variabel lokal disetel ke satu nilai.

CREATE TRIGGER bar AFTER INSERT ON foo
FOR EACH ROW BEGIN
  DECLARE x INT;
  SET x = (SELECT age FROM users WHERE name = 'Bill'); 
  -- ERROR 1242 if more than one row with 'Bill'
END//

CREATE TRIGGER bar AFTER INSERT ON foo
FOR EACH ROW BEGIN
  DECLARE x INT;
  SET x = (SELECT MAX(age) FROM users WHERE name = 'Bill');
  -- OK even when more than one row with 'Bill'
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. Cara memperbaiki MySql:ukuran kolom indeks terlalu besar (Laravel bermigrasi)

  2. Tipe data MySQL apa yang harus digunakan untuk Lintang/Bujur dengan 8 tempat desimal?

  3. Tidak dapat terhubung ke instans RDS dari instans EC2

  4. Python Pandas menulis ke sql dengan nilai NaN

  5. argumen buruk #1 untuk 'ipairs' (tabel diharapkan, mendapat boolean)