Mysql
 sql >> Baza danych >  >> RDS >> Mysql

mysql wyzwala symulację asercji

Problem polega na tym, że MySQL nie ma odpowiednika STOP ACTION Komenda. Tak więc w zasadzie obejścia są dość brudne:

Jednym ze sposobów jest naruszenie ograniczenia wewnątrz wyzwalacza, aby wyświetlić błąd i anulować wstawianie:

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

Następnie w spuście spróbuj:

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

Zaletą tego jest to, że zwracany błąd będzie zduplikowanym błędem klucza, a tekst będzie zawierał „Niepowodzenie potwierdzenia”.

Więc wtedy twój wyzwalacz stanie się:

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 ;

Teraz musisz to zrobić przed UPDATE również, w przeciwnym razie możesz zaktualizować datę do nieprawidłowego stanu. Ale w przeciwnym razie powinno to przynajmniej sprawić, że zaczniesz...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. W jakich okolicznościach chciałbyś, aby Railsy NIE łączyły się ponownie z MYSQL?

  2. Przesyłanie obrazów w CKEditor bez użycia wtyczki

  3. Jak powiedzieć Optymalizatorowi MySQL, aby używał indeksu w tabeli pochodnej?

  4. Prosta tabela UPDATE MySQl z tablicy php

  5. Prawidłowy sposób na utrzymanie aktywnych połączeń w puli (lub przerwanie ich i uzyskanie nowych) podczas dłuższej nieaktywności dla MySQL, aplikacji Grails 2