首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >INNODB delete和update级联

问INNODB delete和update级联
EN

Stack Overflow用户
提问于 2012-03-25 05:37:45
回答 1查看 480关注 0票数 0

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

有3个亲本(?)表-客户、组、促销然后我使用customerGroups - customer_id将每个组分配给多个customer_id _id也有- customerPromotions将每个组分配给多个customer_id_id

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

我一直在努力阅读有关级联的外键引用,但我认为我通过尝试去做事情比学习它们为什么工作更好。任何人可以给我他们的意见,我应该做什么,这些表,让他们正常运作。

我希望在我开始查询或任何进一步的事情之前,数据库和表设置正确,所以任何建议都是很好的。

EN

回答 1

Stack Overflow用户

发布于 2012-03-25 09:56:30

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

代码语言:javascript
复制
$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号。当你与人打交道时,身份很难确定。有很多人叫“约翰·史密斯”。

但是你要处理的两件事已经被识别了。(所有的东西都用id号来标识。)

级联删除是有意义的。id号码的级联更新相对较少;它们被认为永远不会改变。( Oracle DBA坚持主键必须始终是ID号,并且永远不能更改的主要原因是Oracle不能级联更新。)如果以后由于某种原因需要更改一些id号,您可以修改该表,使其包含在UPDATE CASCADE中。

代码语言:javascript
复制
$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的附加唯一约束。你不想在你的数据库中允许这样的事情(如下所示)。

代码语言:javascript
复制
group_id  group_title
--
1         First group
2         First group
3         First group
...
9384      First group

您将希望在所有表中执行这些类型的更改。(可能除了您的客户表。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9855831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档