php - INNODB 级联删除和更新

标签 php mysql

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

有 3 个父表(?) - 客户、群组、促销 然后我有表 - customerGroups 将每个 customer_id 分配给许多 group_id 我还有 - customerPromotions 将每个 customer_id 分配给许多 Promotion_id

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

我一直在尝试阅读级联、外键引用文献,但我认为通过尝试做事然后了解它们为何有效,我可以学得更好。任何人都可以向我提供他们的意见,告诉我应该如何处理这些表以使它们正常运行。

我希望在开始查询或进一步操作之前正确设置数据库和表,因此任何建议都会很棒。

最佳答案

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

$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 号进行级联更新的情况相对较少;他们被认为永远不会改变。 (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

您需要在所有表中进行此类更改。 (也许,您的客户表除外。)

关于php - INNODB 级联删除和更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9855831/

相关文章:

PHP:在特定短语/单词和输出后搜索文本文件

php - 通过 mysql 表中的主键命名 cytoscape 的节点

php - PHP分布式​​系统编程

php - 如何将一个或多个字段忽略空字段更新到mysql数据库中?

PHP 网页抓取

php - Codeigniter mysql 左连接包括选择

python - 如果我有外键,我该如何在 Django 中执行此 "order by"?

mysql - 为 MySQL 导出到 csv 添加额外的列?

进程列表中的 mysql 进程仍然存活

php - CodeIgniter URI 路由 - 如何删除 index.php