Mysql
 sql >> база данни >  >> RDS >> Mysql

Генерирайте уникален AI 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);

вероятно няма и когато забележите грешката в програмата си, може да е твърде късно да различите лошите записи от добрите. Вашите данни биха били технически последователни, но наистина бъркотия.

За да преодолеете този проблем, имате нужда от един източник, от който да изтеглите вашите идентификатори. В 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 (защото не се получава автоматично). Получавате идентификатора с вмъкване във вашата таблица с идентификатори и след това извиквате LAST_INSERT_ID() на MySQL.

По-малко безопасна, но по-опростена алтернатива би била да започнете идентификаторите с различни отмествания:

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');

Това работи, докато вашите идентификатори остават в желания диапазон.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL избира записи преди 1 час или по-пресни в колоната дата и час

  2. Създаване на система с кодове за отстъпка (MySQL/php)

  3. Как да актуализирате 3 колони на таблици, докато само една колона е видима на страницата

  4. Трик за присъединяване към MySQL с 3 таблици

  5. Django AttributeError 'float' обект няма атрибут 'split'