sql >> Database >  >> RDS >> Mysql

MySQL Trigger - Een SELECT opslaan in een variabele

U kunt lokale variabelen declareren in MySQL-triggers, met de DECLARE syntaxis.

Hier is een voorbeeld:

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

Wanneer u een waarde aan een variabele toewijst, moet u ervoor zorgen dat de query slechts één waarde retourneert, niet een reeks rijen of een reeks kolommen. Als uw zoekopdracht in de praktijk bijvoorbeeld een enkele waarde retourneert, is dat goed, maar zodra deze meer dan één rij retourneert, krijgt u "ERROR 1242: Subquery returns more than 1 row ".

U kunt LIMIT . gebruiken of MAX() om ervoor te zorgen dat de lokale variabele is ingesteld op een enkele waarde.

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. SQL Server 2017-back-up -1

  2. MYSQL importeert gegevens uit csv met LOAD DATA INFILE

  3. Specifieke waarde voor SQL-telling over meerdere kolommen en rijen

  4. Panda's:bestanden lezen en schrijven