sql >> Database >  >> RDS >> Mysql

mysql triggers simulatie van beweringen

Welnu, het probleem is dat MySQL geen equivalent heeft van een STOP ACTION opdracht. Dus eigenlijk zijn de work arounds nogal vies:

Eén manier is dat je een beperking binnen de trigger kunt schenden om een ​​fout te bubbelen en het invoegen te annuleren:

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

Probeer dan in de trigger:

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

Het voordeel hiervan is dat de fout die wordt geretourneerd een dubbele sleutelfout is en dat de tekst "Assert Failure" bevat.

Dus dan zou je trigger worden:

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 ;

Nu moet u dit doen vóór UPDATE ook, anders zou u de datum in een ongeldige staat kunnen bijwerken. Maar voor de rest zou dat je in ieder geval op weg moeten helpen...




  1. inlogpagina maken met PHP

  2. Hoe EXTRACTVALUE() werkt in MariaDB

  3. Hoe zie ik zeer nauwkeurige querytijden in de mysql-opdrachtregel?

  4. MySQL installeren op CentOS 7