sql >> Database teknologi >  >> RDS >> Mysql

INNODB kaskade ved sletning og opdatering

Du vil tilsyneladende bare have lidt vejledning. Så jeg vil prøve at gøre det kort.

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

Du bruger kun id-numre, når identiteten er svær at fastlægge. Når du har med mennesker at gøre, er identitet svær at fastgøre. Der er masser af mennesker, der hedder "John Smith".

Men du har at gøre med to ting, der allerede er blevet identificeret. (Og identificeret med id-numre, af alle ting.)

Cascading sletninger giver mening. Det er relativt sjældent at kaskade opdateringer om id-numre; de formodes aldrig at ændre sig. (Hovedårsagen til, at Oracle DBA'er insisterer på, at primærnøgler altid skal være ID-numre, og at de aldrig må ændringen skyldes, at Oracle ikke kan cascade-opdateringer.) Hvis der senere behov for nogle id-numre for at ændre uanset årsagen, kan du ændre tabellen til at inkludere 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;";

Bemærk den yderligere unikke begrænsning på group_title. Du ønsker ikke at tillade noget lignende (nedenfor) i din database.

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

Du vil gerne føre den slags ændringer gennem alle dine borde. (Måske undtagen din tabel over kunder.)




  1. PHP-databasedrevet menu på flere niveauer

  2. Fejl ved erklæring af heltalsvariabel inde i MySQL-lagret funktion

  3. SQL:Hjælp mig med at optimere min SQL

  4. pymssql.OperationalError:DB-Lib fejlmeddelelse 20009, sværhedsgrad 9