如何在MySQL中的两个或多个表中使用唯一ID?

Jac*_*sor 8 mysql

我有一张名为events所有新信息的表格.此表用作所有新闻订阅查询的参考,因此从那里选择事件项,并从正确的表中检索与该事件对应的信息.

现在,这是我的问题.我E_ID在事件表中对应于不同表中事件的ID,无论是T_IDfor tracks,S_IDfor status等等......这些ID可能是相同的,所以暂时我只使用了不同的auto_increment值对于每个表,所以status从500开始tracks0等等.显然,我不想这样做,因为我不知道哪个表将拥有最多的数据.我认为status会很快超过tracks.

信息将event通过触发器插入表中.这是一个例子;

BEGIN
INSERT INTO events (action, E_ID, ID)
VALUES ('has some news.', NEW.S_ID, NEW.ID);
END
Run Code Online (Sandbox Code Playgroud)

那是他的状态表.

是否有一个额外的触发器,我可以确保NEW.S_ID!= a E_ID当前进入events,如果它确实改变了S_ID相应的.

或者,是否有某种键可用于在自动递增时引用事件,S_ID以便S_ID不会增加到值E_ID.

这些是我的想法,我认为后一种解决方案会更好,但我怀疑它是否可能,或者它是否需要另一个参考表并且太复杂了.

Ste*_*ley 13

在表格中要求一个唯一的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, ...);
Run Code Online (Sandbox Code Playgroud)

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