如何在MySQL中的两个或多个表中具有唯一ID?
我有一个表格events
,其中包含所有新信息。该表用作所有新闻源查询的参考,因此从那里选择事件项,并从正确的表中检索与该事件相对应的信息。
现在,这是我的问题。我E_ID
在事件表中有,它对应于不同表中事件的ID,例如T_ID
for tracks
,S_ID
for
status
等等。这些ID可能相同,所以暂时我只是使用了一个不同的auto_increment值对于每个这样status
在500
tracks
上以0等开始的表。显然,我不想这样做,因为我还不知道哪个表中的数据最多。我以为status
会很快超过tracks
。
该信息event
通过触发器插入到表中。这是一个例子。
BEGININSERT 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