2013-07-11 52 views
0

我正在使用phpmyadmin for mysql。我有4个表格project1,project2,project3和结合表。假设联合表使用外键连接到所有其他表,并且借助一些后台脚本将一些数据添加到project1,prject2和project3表中。有没有办法自动更新联合表中的相应外键(无需手动更新记录)。我正在使用GUI的yii框架。 请推荐一些方法,因为我是mysql和yii框架的新手。与外键相关的表彼此同步

+0

看一看存储过程http://www.mysqltutorial.org/mysql-stored-procedure-tutorial.aspx – AgeDeO

回答

0

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被删除或更新它们发生。

因此,如果您更改了项目表中的ID并且希望将此更改反映到联合表中,那么您可以使用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, 
    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 
); 

您可以通过GUI在phpMyAdmin也这样做:

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 
); 

方法2键作为索引,通过点击按钮,然后进入表关系视图并选择你的选项。

希望这会有所帮助 - 我附加了一个phpmyadmin图像供您查看。

​​