【问题标题】:tables related with foreign key are synched with each other与外键相关的表相互同步
【发布时间】:2013-07-09 08:58:06
【问题描述】:

我正在为 mysql 使用 phpmyadmin。我有 4 个表 project1、project2、project3 和组合表。假设 combine 表使用外键连接到所有其他表,并且我们在一些后台脚本的帮助下将一些数据添加到 project1、prject2 和 project3 表。有什么方法可以自动更新组合表中的相应外键(无需手动更新记录)。我正在为 GUI 使用 yii 框架。 请提出一些建议,因为我是 mysql 和 yii 框架的新手。

【问题讨论】:

标签: mysql yii phpmyadmin


【解决方案1】:

http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

不完全理解您的问题,但我认为您指的是ON DELETEON UPDATE

ON DELETE & ON UPDATE 选项

CASCADE
SET NULL
NO ACTION
RESTRICT

ON DELETE 和 ON CASCADE 作为约束放置在 FK 表中,并且在删除或更新父 ID 时发生。

因此,如果您更改了 projects 表中的 id 并且希望此更改反映在 combine 表中,您可以使用 ON UPDATE CASCADE

顺便说一句,为什么你有 4 张桌子?我只能看到需要 2 张桌子。

请注意,下面的 SQL 可能在语法上不正确。

CREATE TABLE tbl_projects (
  id integer NOT NULL PRIMARY KEY AUTO INCREMENT,
  name varchar(255),
  ...
  ...
);

方法1在组合表中为每个项目创建一行:

CREATE TABLE tbl_combine (
  id integer NOT NULL PRIMARY KEY AUTO INCREMENT,
  project_id integer,
  ...
  CONSTRAINT `FK_combine_project` 
      FOREIGN KEY (`project_id`) 
      REFERENCES `tbl_project` (`id`)
      ON DELETE CASCADE ON UPDATE CASCADE
);

方法二:

CREATE TABLE tbl_combine (
  id integer NOT NULL PRIMARY KEY AUTO INCREMENT,
  project1_id integer,
  project2_id integer,
  project3_id integer,
  ...
  CONSTRAINT `FK_combine_project1` 
      FOREIGN KEY (`project1_id`) 
      REFERENCES `tbl_project` (`id`)
      ON DELETE CASCADE ON UPDATE CASCADE

  CONSTRAINT `FK_combine_project2` 
      FOREIGN KEY (`project2_id`) 
      REFERENCES `tbl_project` (`id`)
      ON DELETE CASCADE ON UPDATE CASCADE

  CONSTRAINT `FK_combine_project3` 
      FOREIGN KEY (`project3_id`) 
      REFERENCES `tbl_project` (`id`)
      ON DELETE CASCADE ON UPDATE CASCADE
);

您也可以通过 phpmyadmin 中的 GUI 执行此操作,方法是单击按钮将外键设置为索引,然后转到表关系视图并选择您的选项。

希望这会有所帮助 - 我附上了一张 phpmyadmin 图片供您查看。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-08
    • 2012-06-21
    • 1970-01-01
    • 2011-11-21
    • 2011-01-04
    • 1970-01-01
    • 2019-01-29
    • 2018-08-05
    相关资源
    最近更新 更多