5

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

我的意思是独特的,

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

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

2 回答 2

9

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

一个建议是使用TRIGGER. 在两个表上创建一个BEFORE INSERTINSERT触发器,用于在或期间检查 ID 是否存在UPDATE

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

于 2013-02-12T04:56:02.173 回答
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;

然后,当您想在任一表上插入一个值时,请执行(将“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 中的任何类型的值来代替。

于 2013-02-12T05:11:02.333 回答