如何在MySQL中的两个或多个表中具有唯一ID?

我有一个表格events,其中包含所有新信息。该表用作所有新闻源查询的参考,因此从那里选择事件项,并从正确的表中检索与该事件相对应的信息。

现在,这是我的问题。我E_ID在事件表中有,它对应于不同表中事件的ID,例如T_IDfor tracksS_IDfor

status等等。这些ID可能相同,所以暂时我只是使用了一个不同的auto_increment值对于每个这样status在500

tracks上以0等开始的表。显然,我不想这样做,因为我还不知道哪个表中的数据最多。我以为status会很快超过tracks

该信息event通过触发器插入到表中。这是一个例子。

BEGIN

INSERT INTO events (action, E_ID, ID)

VALUES ('has some news.', NEW.S_ID, NEW.ID);

END

那是他的状态表。

我可以添加触发器以确保NEW.S_ID!= E_ID当前是否在使用中events,如果确实更改了它,则可以进行更改S_ID

另外,当自动递增时,是否可以使用某种键来引用事件,以S_ID使S_ID不会递增到的值E_ID

这些是我的想法,我认为后一种解决方案会更好,但我怀疑是否可能,但需要另一个参考表,而且过于复杂。

回答:

在表之间要求唯一的ID的确很少见,但是这里有一个解决方案。

/* Create a single table to store unique IDs */

CREATE TABLE object_ids (

id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,

object_type ENUM('event', ...) NOT NULL

) ENGINE=InnoDB;

/* Independent object tables do not auto-increment, and have a FK to the object_ids table */

CREATE TABLE events (

id INT UNSIGNED NOT NULL PRIMARY KEY,

...

CONSTRAINT FOREIGN KEY (id) REFERENCES object_ids (id)

) ENGINE=InnoDB;

/* When creating a new record, first insert your object type into the object_ids table */

INSERT INTO object_ids(object_type) VALUES ('event');

/* Then, get the auto-increment id. */

SET @id = LAST_INSERT_ID();

/* And finally, create your object record. */

INSERT INTO events (id, ...) VALUES (@id, ...);

显然,您将为events其他表复制表的结构。

以上是 如何在MySQL中的两个或多个表中具有唯一ID? 的全部内容, 来源链接: utcz.com/qa/418647.html

回到顶部