sql >> Database teknologi >  >> RDS >> Mysql

mysql udløser simulering af påstande

Nå, problemet er, at MySQL ikke har en ækvivalent til en STOP ACTION kommando. Så dybest set er arbejdsomgivelserne ret beskidte:

En måde er, at du kan overtræde en begrænsning inde i triggeren for at boble en fejl og annullere indsættelsen:

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

Derefter, i triggeren, skal du bare prøve at:

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

Fordelen ved det er, at den fejl, der returneres, vil være en dubletnøglefejl, og teksten vil indeholde "Bekræft fejl".

Så din trigger ville blive:

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 skal du gøre dette før UPDATE også, ellers kan du opdatere datoen til en ugyldig tilstand. Men ellers burde det i det mindste få dig i gang...




  1. Er det nødvendigt at undslippe brugerinput fra databasen?

  2. Har problemer med at matche rækker i databasen ved hjælp af PDO

  3. Hvad er grunden til, at følgende sql-kode ikke kunne indsætte data?

  4. oracle blob tekstsøgning