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

mysqlはアサーションのシミュレーションをトリガーします

    問題は、MySQLにSTOP ACTIONに相当するものがないことです。 指図。したがって、基本的に、回避策はかなり汚いです:

    1つの方法は、トリガー内の制約に違反してエラーをバブルし、挿入をキャンセルできることです。

    CREATE TABLE stop_action (
        id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(35),
        UNIQUE KEY (id, name)
    );
    INSERT INTO stop_action (1, 'Assert Failure');
    

    次に、トリガーで次のことを試してください。

    INSERT INTO stop_action (1, 'Assert Failure');
    

    その利点は、返されるエラーが重複キーエラーになり、テキストに「AssertFailure」が含まれることです。

    したがって、トリガーは次のようになります。

    delimiter |
    
    CREATE TRIGGER asser1_before BEFORE INSERT ON test1
      FOR EACH ROW BEGIN
        SELECT count(*) INTO test FROM (select count(*)
              from Video  
              where Date >= DATE_SUB(current_date(),INTERVAL  1 YEAR ) 
                && Date<=current_date()  
              group by User   
              having count(*) > 200);
        IF test != 0 THEN
            INSERT INTO stop_action (1, 'Assert Failure');
        END IF;
      END;
    |
    
    delimiter ;
    

    ここで、UPDATEの前にこれを行う必要があります そうしないと、日付を無効な状態に更新する可能性があります。それ以外の場合は、少なくとも開始する必要があります...




    1. mysqlの遅いクエリ

    2. SQLのみを使用してSQLServer2005の画像フィールドに画像を挿入する

    3. Rails+Postgresで任意の時間間隔でレコードをカウントするための最良の方法

    4. MySQLレコードを1対多の関連テーブルに1回のアクションで入力します