加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

PHP更新MYSQL的多对多关系

发布时间:2020-05-25 09:25:11 所属栏目:PHP 来源:互联网
导读:我有一个多对多关系,用 MySQL中的关联表实现.我有一张儿童餐桌和一张父母餐桌.子项可以有多个父项,保存在parent_child_link关联表中,并带有其ID. 可以通过HTML表单更新子项,父项是HTML多选.现在我需要更新数据库中的记录,但我的解决方案效率不高.这是伪代码我

我有一个多对多关系,用 MySQL中的关联表实现.我有一张儿童餐桌和一张父母餐桌.子项可以有多个父项,保存在parent_child_link关联表中,并带有其ID.

可以通过HTML表单更新子项,父项是HTML多选.现在我需要更新数据库中的记录,但我的解决方案效率不高.这是伪代码我做的:

>更新child_id = x的子信息
>删除parent_id_link中child_id = x的所有当前关联
>插入新关联

这种解决方案效果很好,但是当父母没有改变时,例如只更改了孩子的名字,然后执行了2个不必要的查询.如何避免那些不必要的查询?有没有办法检查多选中的父母是否没有改变?

当然,我可以忽略所有这些麻烦,因为它已经有效,但我真的希望尽可能保持高效.

尝试在子表的定义中使用ON UPDATE CASCADE和ON DELETE CASCADE在数据库中而不是在应用程序层中解决它.

MySQL网站略有修改的示例:

CREATE TABLE parent (id INT NOT NULL,PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE child (id INT,parent_id INT,INDEX par_ind (parent_id),FOREIGN KEY (parent_id) REFERENCES parent(id)
                      ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=INNODB;

查看文档:http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

编辑:对于你的多对多关系,你可以使用类似的东西:

CREATE TABLE parent_child_link (
                    parent_id INT NOT NULL,child_id INT NOT NULL,PRIMARY KEY(parent_id,child_id),FOREIGN KEY (parent_id) REFERENCES parent(id)
                      ON DELETE CASCADE ON UPDATE CASCADE,FOREIGN KEY (child_id) REFERENCES child(id)
                      ON DELETE CASCADE ON UPDATE CASCADE
);

希望这可以帮助.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读