在mysql中创建两个用外键链接的表,插入、删除和更新

Posted

技术标签:

【中文标题】在mysql中创建两个用外键链接的表,插入、删除和更新【英文标题】:create two tables linked with foreign key, insert,delete,and update in mysql 【发布时间】:2012-12-14 09:05:56 【问题描述】:

我有一个场景,我必须创建一个包含以下字段的表

部门名称、部门名称、域名、协调员名称、协调员电子邮件

现在,对于每个部门名称,可以有多个 coordinator_name,并且与其对应的 coordinator_email 也不止一个。

我不能在一个表(部门)中执行此操作,因为我无法将两个协调员姓名及其协调员电子邮件存储在 mysql 的一行中。

所以我打算用部门名称(主键)、部门名称、域名称制作一张表(协调员) 第二个表包含部门名称(主键)、协调员名称、协调员电子邮件,外键引用部门(部门名称)

现在我如何使用插入语句,以便将数据同时插入两个表中。同样,我如何使用删除和更新语句...

请帮忙...谢谢...

【问题讨论】:

【参考方案1】:
    您可以使用一张桌子

部门 A - 事工 - 领域 - 协调员 A - 协调员电子邮件 A

部门 A - 事工 - 领域 - 协调员 B - 协调员电子邮件 B

部门 A - 事工 - 领域 - 协调员 C - 协调员电子邮件 C

部门 B - 事工 - 领域 - 协调员 A - 协调员电子邮件 A

如果您只需要部门,您会忽略协调员的信息并按部门分组?除非你特别想要两张桌子?

    您可以使用 TRIGGERS 来实现,每次执行 INSERT、UPDATE、DELETE 时都会触发。

    将其拆分到两个不同的表中

协调员:id、姓名、电子邮件、departmentId(Departments.id 的外键) 部门:id、姓名、部门、​​域

然后外键将负责更新和删除(如果部门被删除,将删除所有协调员)

--编辑

然后你首先遍历部门:

从 your_table 中选择 DISTINCT(department_name)

如果然后第二个循环是显示每个部门的所有协调员

SELECT * FROM your_table WHERE department_name = ''

【讨论】:

感谢您的回复..department_name 在每种情况下都是独一无二的...这对我有用..如果你能解释一下我将如何通过编写部门来显示所有协调员信息名称..并且不是特定的有两个表... 但是在您最初的问题中,您说过对于每个部门名称,您可以有多个协调员,对吧?那怎么可能每次都是独一无二的呢? 不,我的意思是...对于每个部门名称 der 可以是多个协调员 bt 部门名称不会在列表中重复...【参考方案2】:

只是不清楚你的问题。您写了该表 Coordinator 将以 department_name 作为主键。这怎么可能?您不应该将部门名称作为协调器表中的外键吗?如果我误解了你的问题,我很抱歉

【讨论】:

【参考方案3】:

首先,不要使用名称作为主键,而是使用 id 作为键。以您的部门为例,创建一个 id(自动递增)并且没有值,以便它自己执行此操作。然后生成一个附加到该部门名称的唯一 ID,如果需要,您可以使用此唯一 ID 稍后调用。但是,您需要此 ID 才能将其他名称与该部门相关联。将部门名称保存在一个用于创建唯一 ID 的表中,并在另一个表中包含这些名称以及每个使用的值的此 ID。而且您需要不止一个查询来执行此操作。


部门。表:id(primary|auto inc) uid dept_name

坐标。 table: id(primary|auto inc) uid(from dept. table) min_name coord_name coord_email

<?php
    mysql_query("
        insert into `dept` values(
            NULL,
            `$uid`,
            `$dept_name`
        )
    ");
    mysql_query("
        insert into `coord` values (
            NULL,
            `$uid`,
            `$coord_name`,
            `$coord_email`,
            `$ministry_name`
        )
    ");
?>

也许这为您解决了问题。

【讨论】:

【参考方案4】:

如果您使用 2 张桌子 表“部门” 列:id、姓名、部门、​​域

表“协调员” 列 : id, name, email, departmentId

假设您在 Department 和 Coordinator 表之间存在关系。下面的查询应该根据部门名称返回记录

select * from Coordinator 
     join Department on Coordinator.departmentId = Department.Id
Where Department.name = '' --- pass any name you want in single quotes

让我知道这是否适合你

【讨论】:

以上是关于在mysql中创建两个用外键链接的表,插入、删除和更新的主要内容,如果未能解决你的问题,请参考以下文章

在交叉引用表中创建具有两个外键的 MySQL 表

在 Oracle 中触发 - 增加用外键引用的列

python--MySQL多表查询

如何在 MySQL 中创建链接表或镜像表

mysql中怎么为一个已经建立好的表加入一个外码

SQL表与表之间建立外键约束之后,怎么建立连级更新和删除?