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

Kaskada INNODB przy usuwaniu i aktualizowaniu

Wydaje się, że potrzebujesz tylko trochę wskazówek. Więc postaram się być zwięzły.

$sql = "CREATE TABLE customerGroups (
   customer_id int(11) NOT NULL,
   group_id int(11) NOT NULL,
   PRIMARY KEY (customer_id, group_id),
   CONSTRAINT customers_customergroups_fk
     FOREIGN KEY (customer_id)
     REFERENCES customers (customer_id) 
     ON DELETE CASCADE,
   CONSTRAINT groups_customergroups_fk
     FOREIGN KEY (group_id)
     REFERENCES groups (group_id) 
     ON DELETE CASCADE
)ENGINE = INNODB;";

Ty tylko potrzebujesz numery identyfikacyjne, gdy tożsamość jest trudna do ustalenia. Kiedy masz do czynienia z ludźmi, trudno jest ustalić tożsamość. Jest wiele osób o imieniu „Jan Kowalski”.

Ale masz do czynienia z dwiema rzeczami, które już zostały zidentyfikowane. (I utożsamiany z numerami identyfikacyjnymi wszystkich rzeczy.)

Kaskadowe usuwanie ma sens. Kaskadowe aktualizowanie numerów identyfikacyjnych jest stosunkowo rzadkie; zakłada się, że nigdy się nie zmienią. (Głównym powodem, dla którego administratorzy baz danych Oracle nalegają, aby klucze podstawowe zawsze być numerami identyfikacyjnymi i nigdy nie mogą zmiana wynika z tego, że Oracle nie może aktualizacje kaskadowe). Jeśli później niektóre numery identyfikacyjne potrzebują zmienić z jakiegokolwiek powodu, możesz zmienić tabelę, aby zawierała ON UPDATE CASCADE.

$sql = "CREATE TABLE groups
(
group_id int(11) NOT NULL AUTO_INCREMENT,
group_title varchar(50) NOT NULL UNIQUE,
group_desc varchar(140),
PRIMARY KEY (group_id)
)ENGINE = INNODB;";

Zwróć uwagę na dodatkowe ograniczenie unikatowości na group_title. Nie chcesz zezwalać na coś takiego (poniżej) w swojej bazie danych.

group_id  group_title
--
1         First group
2         First group
3         First group
...
9384      First group

Będziesz chciał przeprowadzić tego rodzaju zmiany na wszystkich swoich stołach. (Może z wyjątkiem Twojej tabeli klientów).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sequelize wiele do wielu problemów z zapytaniami

  2. Jak wyłączyć tryb ścisły MySQL?

  3. Czy urlencode() jest wystarczająco dobry, aby powstrzymać wszystkie ataki typu SQL injection w roku 2011?

  4. MySQL wybierz dane rozdzielane

  5. Problem z zapytaniem o zakres daty i godziny w mySQL