INNODB级联删除和更新

时间:2012-03-24 21:37:45

标签: php mysql

我正在尝试在mysql数据库中创建一些表来处理客户,将它们分配给组并为这些组中的客户提供唯一的促销代码/优惠券。

有3个父(?)表 - 客户,群组,促销 然后我有table-customerGroups将每个customer_id分配给许多group_id 我也有 - customerPromotions将每个customer_id分配给很多promotion_id的

我知道我需要在删除和更新时使用级联,这样当我删除客户,促销或组时,数据也会从子表中删除。我把一些php放在一起轻松创建表格http://pastebin.com/gxhW1PGL

我一直在尝试阅读级联,外键引用,但我认为通过尝试做事情然后了解它们的工作原理我会学得更好。任何人都可以告诉我他们应该对这些表做些什么来使它们正常运行。

我想在开始查询或其他任何事情之前正确设置数据库和表格,这样任何建议都会很棒。

1 个答案:

答案 0 :(得分:1)

你似乎只想要一点指导。所以我会尽量简短。

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

当身份难以确定时,您只需需要身份证号码。当你与人交往时,身份很难确定。有很多人名叫“约翰史密斯”。

但是你正在处理已经确定的两件事。 (并用身份证号码识别所有事物。)

级联删除是有道理的。在id号上级联更新是相对罕见的;他们被认为永远不会改变。 (Oracle DBA坚持认为主键必须始终是ID号,并且必须永远不会更改的主要原因是因为Oracle 无法级联更新。)如果稍后某些ID号需要因任何原因需要更改,您可以更改表以包含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

您希望通过所有表格进行这些更改。 (或许,除了您的客户表。)