sql >> Databasteknik >  >> RDS >> Mysql

mysql utlöser simulerande påståenden

Tja, problemet är att MySQL inte har en motsvarighet till en STOP ACTION kommando. Så i grund och botten är arbetsmiljöerna ganska smutsiga:

Ett sätt är att du kan bryta mot en begränsning inuti utlösaren för att bubbla ett fel och avbryta infogningen:

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

Sedan, i avtryckaren, försök bara att:

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

Fördelen med det är att felet som returneras kommer att vara ett duplicerat nyckelfel, och texten kommer att innehålla "Förstå misslyckande".

Så då skulle din trigger bli:

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 måste du göra detta innan UPDATE också, annars kan du uppdatera datumet till ett ogiltigt tillstånd. Men annars borde det åtminstone få dig igång...




  1. mysql:hur sparar man ORDER BY efter LEFT JOIN utan att beställa om?

  2. Frågan ger inte resultat som förväntat

  3. Hur man installerar den senaste MySQL 8 på Debian 10

  4. Bevilja alla på ett specifikt schema i db till en grupproll i PostgreSQL