繁体   English   中英

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

[英]Is it possible to create a Unique (Index) constraint across multiple tables?

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

我的意思是独一无二的

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

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

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

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

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

就像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中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM