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

Jak wymusić integralność referencyjną w dziedziczeniu jednotabelowym?

To, co możesz zrobić, to zaimplementować wyzwalacze na swoich Users i Team tabele, które są wykonywane po usunięciu wierszy z:

Tabela użytkowników:

DELIMITER $$
CREATE TRIGGER user_playlist_delete 
BEFORE DELETE ON User FOR EACH ROW
BEGIN
    DELETE a FROM Playlist a
    INNER JOIN UserPlaylist b ON a.id = b.id AND b.userId = OLD.id;
END$$
DELIMITER ;

Tabela zespołu:

DELIMITER $$
CREATE TRIGGER team_playlist_delete 
BEFORE DELETE ON Team FOR EACH ROW
BEGIN
    DELETE a FROM Playlist a
    INNER JOIN TeamPlaylist b ON a.id = b.id AND b.teamId = OLD.id;
END$$
DELIMITER ;

To, co te wyzwalacze zrobią, to za każdym razem, gdy rekord zostanie usunięty z jednej z tych tabel, DELETE operacja zostanie automatycznie wykonana na Playlists tabela przy użyciu id który ma zostać usunięty (poprzez połączenie wewnętrzne).

Przetestowałem to i działa świetnie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TIMESTAMPDIFF() Przykłady – MySQL

  2. Jak przerwać operację INSERT w wyzwalaczu MySql?

  3. Eksport MySQL do INTO OUTFILE --secure-file-priv błąd podczas używania set directory

  4. MySQL - Jak wykonać Oracle RANK() OVER (ORDER BY score DESC)

  5. Nie można było nawiązać połączenia, ponieważ maszyna docelowa aktywnie je odrzuciła (PHP / WAMP)