解决这个问题的规范方法是使用一个单个表。这使得保持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 语句试图违反该约束将引发错误,您将需要编写触发器。