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

Kolejność usuwania z ograniczeniami klucza obcego,

Oficjalnie nie masz kontroli nad kolejnością operacji kaskadowych. Możesz być w stanie nadużyć niektórych nieudokumentowanych zachowanie jednak:

  • dla MySQL 5.5, klucze obce są wykonywane w kolejności, w jakiej zostały utworzone, więc upuszczenie i ponowne utworzenie fk_category_org -ograniczenie powinno działać
  • dla MySQL 5.6+ klucze obce są wykonywane w porządku leksykalnym ich nazw, więc zmiana nazwy fk_category_org do m.in. fk_z_category_org powinien działać

Jest to nieudokumentowane i może się zmienić w każdej chwili (na co może mieć wpływ inne czynniki).

Biorąc to pod uwagę, właściwy sposób na zrobienie tego (i wszystko inne zbyt skomplikowane dla on cascade ) byłoby dodanie before delete -wyzwalacz w Twojej organisation -tabela, która "ręcznie" usuwa najpierw użytkowników, a następnie kategorie. before delete -wyzwalacze są wykonywane przed on cascade (abyś mógł zdecydować, czy chcesz je zachować, czy nie, chociaż prawdopodobnie byłoby to mylące).

Nie jest do końca jasne, czy to jest twoje zamierzone zachowanie, ale obecnie użytkownik może mieć kategorię należącą do organizacji 1, gdy jest przypisany do organizacji 2. Usunięcie organizacji 1 nadal nie powiedzie się. Wygląda na to, że chcesz temu zapobiec za pomocą swojego projektu, ale jeśli chcesz, aby usuwanie zadziałało również w tym przypadku, potrzebujesz aby użyć wyzwalacza, aby móc włączyć to (lub ręcznie usunąć w swojej aplikacji), kaskadowanie nie będzie działać, chyba że kaskadujesz również w tabeli kategorii.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapisywanie ścieżki pliku do Bazy danych / SQL

  2. Mysqldump:Czy możesz zmienić nazwę tabeli, do której wstawiasz?

  3. Sailsjs Mysql ORM wielokrotne zapytania w tym samym polu tabeli

  4. Nie można zwiększyć max_open_files dla Mysql max-połączeń w Ubuntu 15

  5. Wiele stanów końcowych zapytań w MySQL, wszystkie połączenia używane w ciągu kilku minut