有没有办法在 MySQL 数据库中的表之间创建唯一索引?
我的意思是独特的,
table A ids=1,2,5,7...
table B ids=3,4,6,8...
有没有办法在 MySQL 数据库中的表之间创建唯一索引?
我的意思是独特的,
table A ids=1,2,5,7...
table B ids=3,4,6,8...
我认为,直接创建约束是不可能的。但是有一些解决方案可以让您获得唯一的 ID。
一个建议是使用TRIGGER
. 在两个表上创建一个BEFORE INSERTINSERT
触发器,用于在或期间检查 ID 是否存在UPDATE
。
其次,是通过创建包含UNIQUE
数字和其他表的第三个表:TableA
然后TableB
将在第三个表上引用。
就像 JW 说的那样,这可能适用于使用第三张桌子。在 MySQL 中,您可以使用标识字段来简化此操作。一个非常简单的例子是使用这些表(表的简单版本,只有名称,不知道任何进一步的信息):
CREATE TABLE a
(
`id` int,
`name` varchar(100),
PRIMARY KEY(`id`)
)
ENGINE = INNODB;
CREATE TABLE b
(
`id` int,
`name` varchar(100),
PRIMARY KEY(`id`)
)
ENGINE = INNODB;
CREATE TABLE c
(
`id` int auto_increment,
`intable` varchar(10) not null,
PRIMARY KEY(`id`)
)
ENGINE = INNODB;
然后,当您想在任一表上插入一个值时,请执行(将“Joe”插入 a 的示例):
INSERT INTO c (`intable`) VALUES ('a');
INSERT INTO a (`id`, `name`)
SELECT LAST_INSERT_ID() AS id, 'Joe' AS name;
c 中 intable 条目的唯一原因是您知道它是为哪个表创建的。可以使用插入到 c 中的任何类型的值来代替。