sql >> Databáze >  >> RDS >> Mysql

INNODB kaskáda na odstranění a aktualizaci

Zdá se, že chcete jen malý návod. Pokusím se tedy být stručný.

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

Pouze potřebujete identifikační čísla, když je těžké určit identitu. Když jednáte s lidmi, identita se těžko hledá. Existuje spousta lidí se jménem "John Smith".

Ale vy máte co do činění se dvěma věcmi, které již byly identifikovány. (A identifikovaný s identifikačními čísly, ze všech věcí.)

Kaskádové mazání dává smysl. Je poměrně vzácné kaskádovat aktualizace identifikačních čísel; předpokládá se, že se nikdy nezmění. (Hlavní důvod, proč správci databází Oracle trvají na tom, že primární klíče musí vždy být ID čísla a že nesmí nikdy změna je způsobena tím, že Oracle nemůže kaskádové aktualizace.) Pokud později nějaká identifikační čísla potřebujete změnit z jakéhokoli důvodu, můžete změnit tabulku tak, aby zahrnovala 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;";

Všimněte si dalšího jedinečného omezení u group_title. Nic takového (níže) ve své databázi nechcete povolit.

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

Tyto změny budete chtít provést ve všech svých tabulkách. (Snad kromě vaší tabulky zákazníků.)




  1. Metoda nabídky CHOP

  2. MariaDB FOUND_ROWS() Vysvětleno

  3. Proč MySql automaticky neoptimalizuje dotaz BETWEEN?

  4. Druhý dotaz SELECT, pokud první SELECT vrátí 0 řádků