mysql - 在多个数据表上生成唯一的 AI ID

标签 mysql

我正在设计一个数据库,但此时我遇到了困难,

目前我有 3 个表:

  1. 前艺术家
  2. ex_tracks
  3. ex_labels

现在我希望在这 3 个(或更多)表中有一个唯一的 ID

因此,如果“Example Artist”的 ID 为“1”,则“Example Track”的 ID 不能为“1” 但应该得到 ID“2”,因为“1”已经存在

最佳答案

我理解你的担忧。一旦您决定使用技术 ID 设计您的数据库,就会始终存在混淆 ID 的危险。而

insert into album_track (album, artist, track, no) 
  values ('B0016991-00', 'JBIEBER', 'BOYFRIEND0001', 2);

代替

insert into album_track (album, artist, track, no) 
  values ('B0016991-00', 'BOYFRIEND0001', 'JBIEBER', 2);

可能会通过一个错误,

insert into album_track (album_id, artist_id, track_id, no) values (40, 22, 12, 2);

代替

insert into album_track (album_id, artist_id, track_id, no) values (40, 12, 22, 2);

可能不会,当您发现程序错误时,可能已经来不及分辨记录的好坏了。您的数据在技术上是一致的,但实际上一团糟。

要克服这个问题,您需要一个来源来提取您的 ID。例如,在 Oracle 中,您将使用一个序列。在 MySQL 中,您可以为此目的创建一个 ID 表:

create table ids(id int auto_increment primary key);
create table album(id int primary key, album_no text, album_name text,
  foreign key (id) references ids(id));
create table track(id int primary key, track_name text, record_date date, take int, 
  foreign key (id) references ids(id));
insert into ids values ();
insert into album (id, album_no, album_name) values
  ((select last_insert_id), 'B0016991-00', 'Justin Bieber – Believe - Deluxe Edition');

所以每当你在你的一个表中插入一条记录时,你必须指定一个ID(因为它不是自动得到的)。您通过插入 IDs 表获得 ID,然后调用 MySQL 的 LAST_INSERT_ID()。

一种不太安全但更简单的替代方法是以不同的偏移量开始 ID:

create table album(id int auto_increment primary key, album_no text, album_name text);
create table track(id int auto_increment primary key, track_name text, record_date date);
alter table track auto_increment=10000001;
create table artist(id int auto_increment primary key, artist_name varchar(100));
alter table artist auto_increment=20000001;
insert into artist (artist_name) values ('Justin Bieber');

只要您的 ID 保持在所需范围内,这就有效。

关于mysql - 在多个数据表上生成唯一的 AI ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30547993/

相关文章:

php - SQL 查询 GROUP BY?

PHP PDO 登录帐户

mysql - 使用两列中的数据进行计数

php - Mysql - 处理供应商/地点对表的最有效方式

php - 上传包含50000条记录的CSV文件并将数据插入MySQL

PHP 购物篮问题

php - 简单的 php 表单将 "1"插入所有字段而不是 varchar

php - 每秒自动数据库读/写

mysql - 优化大型关键字表?

java - 实体/行仅有时使用 Spring/Hibernate 更新?