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

mysql attiva la simulazione di asserzioni

Bene, il problema è che MySQL non ha l'equivalente di un STOP ACTION comando. Quindi, in pratica, le soluzioni alternative sono piuttosto sporche:

Un modo è che puoi violare un vincolo all'interno del trigger per visualizzare un errore e annullare l'inserimento:

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

Quindi, nel trigger, prova a:

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

Il vantaggio è che l'errore restituito sarà un errore di chiave duplicata e il testo includerà "Assert Failure".

Quindi il tuo trigger diventerebbe:

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 ;

Ora, dovresti farlo prima di UPDATE inoltre, altrimenti potresti aggiornare la data in uno stato non valido. Ma per il resto, questo dovrebbe almeno iniziare...