Mysql
 sql >> база данни >  >> RDS >> Mysql

INNODB каскада при изтриване и актуализиране

Изглежда, че искате само малко напътствие. Така че ще се опитам да бъда кратък.

$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;";

Само нуждаете се идентификационни номера, когато е трудно да се установи самоличност. Когато си имаш работа с хора, идентичността е трудно да се определи. Има много хора на име "Джон Смит".

Но вие се занимавате с две неща, които вече са идентифицирани. (И идентифицирани с идентификационни номера на всички неща.)

Каскадното изтриване има смисъл. Сравнително рядко е каскадните актуализации на идентификационните номера; предполага се, че никога не се променят. (Основната причина, поради която администраторите на база данни на Oracle настояват, че първичните ключове трябва винаги да бъдат идентификационни номера и че те не трябва никога промяната е, защото Oracle не може каскадни актуализации.) Ако по-късно някои идентификационни номера необходими за да промените по каквато и да е причина, можете да промените таблицата, за да включите 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;";

Обърнете внимание на допълнителното уникално ограничение за group_title. Не искате да разрешавате нещо подобно (по-долу) във вашата база данни.

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

Ще искате да пренесете тези видове промени във всичките си таблици. (С изключение може би на вашата маса с клиенти.)




  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 база данни за моя конкретен случай

  2. Може ли да има SQL заявка, независима от базата данни, за извличане на горните N реда?

  3. Как да вмъкна няколко реда въз основа на заявка?

  4. MySQL групово вмъкване от CSV файлове с данни

  5. Актуализиране на множество колони от подзаявка