不要从两个不同的表重复输入行

时间:2015-06-27 12:11:01

标签: mysql database xampp

我创建了两个数据库(php使用XAMPP),一个用于员工(id,name),另一个用于管理员(id,name)。 两个表中的id是主键,我需要在id不重复的两个表之间建立关系。例如:admin(1,a)使用id = 1,不应该在员工中使用表

请帮助

1 个答案:

答案 0 :(得分:0)

此问题的规范方法是使用单个表。这样可以很容易地使id值保持不变。

您可以添加 discriminator 列,指示行是代表“员工”还是“管理员”。在您的示例中,有两个可能的值。

 CREATE TABLE employee 
 ( id     INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT 'pk'
 , ename  VARCHAR(50) NOT NULL
 , admin  TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'boolean'
 )   

一些示例数据,用于说明:

 id  ename             admin
 --- ---------------- -------
 42  Barney Rubble     0 
 43  Fred Flintstone   0 
 17  Mr. Slate         1

示例查询:

-- select "employee" rows
SELECT id, ename FROM employee WHERE admin=0

-- select "administrator" rows
SELECT id, ename FROM employee WHERE admin 

如果您需要两个单独的表,那么您询问了

最重要的是,MySQL中没有可用的声明性约束,它会强制两个表之间的id值彼此“不同”。

要做到这一点,你必须“推出自己的”解决方案。而且这个解决方案并非无足轻重,而是可以参与其中。

有一些解决方案可以解决更简单的问题,自动生成唯一的id值。但要实际执行唯一性,没有简单的方法可以做到这一点。

您的目标是仅执行约束,以便INSERT和UPDATE语句在尝试违反约束时会抛出错误,您将需要编写触发器。