Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wyzwalacz MySQL - Przechowywanie SELECT w zmiennej

Możesz deklarować zmienne lokalne w wyzwalaczach MySQL za pomocą DECLARE składnia.

Oto przykład:

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

Podczas przypisywania wartości do zmiennej należy upewnić się, że zapytanie zwraca tylko pojedynczą wartość, a nie zestaw wierszy lub zestaw kolumn. Na przykład, jeśli zapytanie zwraca w praktyce pojedynczą wartość, jest to w porządku, ale gdy tylko zwróci więcej niż jeden wiersz, otrzymasz „ERROR 1242: Subquery returns more than 1 row

Możesz użyć LIMIT lub MAX() aby upewnić się, że zmienna lokalna jest ustawiona na pojedynczą wartość.

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. Dynamicznie przypisuj alias do wszystkich nazw pól w zapytaniu msyql

  2. Jak używać instrukcji CASE w MySQL?

  3. Jak zresetować hasło roota MySQL lub MariaDB w systemie Linux?

  4. Porównanie MySQL z wartością null

  5. Bezpieczne pliki do pobrania