是否可以跨多个表创建唯一(索引)约束?

时间:2013-02-12 04:50:30

标签: mysql sql database unique-constraint

有没有办法在MySQL数据库中的表之间创建唯一索引?

独一无二,我的意思是,

                table A ids=1,2,5,7... 

                table B ids=3,4,6,8...

2 个答案:

答案 0 :(得分:9)

我认为,直接创建约束是不可能的。但是有一些解决方案可以让您获得唯一的ID。

一个建议是使用TRIGGER。在两个表上创建 BEFORE INSERT 触发器,在INSERTUPDATE期间检查存在的ID。

其次,是通过创建包含UNIQUE个数字的第三个表和其他表格:TableATableB将在第三个表格上引用。

答案 1 :(得分:1)

就像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;

然后,当你想在任一个表上插入一个值时,do(将'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中。