sql >> Databáze >  >> RDS >> Mysql

mysql spouští simulující tvrzení

Problém je v tom, že MySQL nemá ekvivalent STOP ACTION příkaz. Takže v zásadě jsou práce kolem docela špinavé:

Jedním ze způsobů je, že můžete porušit omezení uvnitř spouštěče, abyste vybublali chybu a zrušili vložení:

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

Pak ve spouštěči zkuste:

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

Výhodou toho je, že vrácená chyba bude duplicitní klíčová chyba a text bude obsahovat "Assert Failure".

Takže váš spouštěč by se stal:

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 ;

Nyní byste to měli udělat před UPDATE jinak byste mohli aktualizovat datum do neplatného stavu. Ale jinak by vás to mělo alespoň nastartovat...




  1. Základy tabulkových výrazů, Část 10 – Pohledy, SELECT * a změny DDL

  2. Proč MySQL kompletně přeformátovat text dotazu VIEW?

  3. Hibernate anotace pro sériový typ PostgreSQL

  4. Vyberte část z pole blob MySQL