sql >> データベース >  >> RDS >> Mysql

MySQLトリガー-SELECTを変数に格納する

    DECLAREを使用して、MySQLトリガーでローカル変数を宣言できます。 構文。

    次に例を示します:

    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
    

    変数に値を割り当てるときは、クエリが行のセットや列のセットではなく、単一の値のみを返すようにする必要があります。たとえば、クエリが実際に単一の値を返す場合は問題ありませんが、複数の行を返すとすぐに「ERROR 1242: Subquery returns more than 1 row」と表示されます。 "。

    LIMITを使用できます またはMAX() ローカル変数が単一の値に設定されていることを確認します。

    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. 多次元配列をMySQLテーブルに挿入するにはどうすればよいですか?

    2. クエリによるSQL列タイトルの変更

    3. MYSqlテーブルから重複データを見つけて削除するためのクエリ

    4. MacOSX上のOracle11g