Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql triggert simulierende Behauptungen

Nun, das Problem ist, dass MySQL kein Äquivalent zu STOP ACTION hat Befehl. Im Grunde genommen sind die Workarounds ziemlich schmutzig:

Eine Möglichkeit besteht darin, eine Einschränkung innerhalb des Triggers zu verletzen, um einen Fehler anzuzeigen und die Einfügung abzubrechen:

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');

Versuchen Sie dann im Trigger einfach Folgendes:

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

Der Vorteil davon ist, dass der zurückgegebene Fehler ein doppelter Schlüsselfehler ist und der Text "Assert Failure" enthält.

Ihr Trigger würde also zu:

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 ;

Jetzt müssten Sie dies vor UPDATE tun andernfalls könnten Sie das Datum in einen ungültigen Zustand aktualisieren. Aber ansonsten sollte dir das zumindest den Einstieg erleichtern...