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

JEŚLI NIE ISTNIEJE w wyzwalaczu

DROP TRIGGER IF EXISTS before_delete_concept_access;
DELIMITER //
CREATE TRIGGER before_delete_concept_access
    BEFORE DELETE ON `concept_access` FOR EACH ROW
    BEGIN
        IF (SELECT COUNT(*) FROM concept_access_log WHERE map=OLD.map 
                          AND accesstype=OLD.accesstype AND startdate=OLD.startdate AND stopdate=OLD.stopdate) = 0 THEN
            INSERT INTO concept_access_log (map, accesstype, startdate, stopdate)
            VALUES (OLD.map, OLD.accesstype, OLD.startdate, OLD.stopdate);
        END IF;
    END//
DELIMITER ;

Nie używam not exists , po prostu sprawdź, czy liczba dopasowań jest większa niż 0

Twój kod działa dobrze na moim komputerze, jaka jest twoja wersja MySQL?

mysql> select version();
+------------+
| version()  |
+------------+
| 5.1.56-log |
+------------+
1 row in set (0.00 sec)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL niewłaściwie skonfigurowany Przyczyna:niebezpieczne użycie ścieżki względnej

  2. Błąd składni SQL podczas tworzenia procedury składowanej w MySQL

  3. Błąd MySQL:maksymalny rozmiar kolumny to 767 bajtów

  4. Jak mysql porządkuje wiersze o tej samej wartości?

  5. MySQL - SELECT WHERE pole IN (podzapytanie) - Bardzo wolne dlaczego?