Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Generuj unikalny identyfikator AI w wielu tabelach danych

Rozumiem twoje obawy. Gdy zdecydujesz się zaprojektować bazę danych z identyfikatorami technicznymi, zawsze istnieje niebezpieczeństwo pomylenia identyfikatorów. Podczas

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

zamiast

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

prawdopodobnie przez błąd,

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

zamiast

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

prawdopodobnie nie, a gdy zauważysz błąd programu, może być za późno, aby odróżnić złe rekordy od dobrych. Twoje dane byłyby spójne technicznie, ale naprawdę bałagan.

Aby rozwiązać ten problem, potrzebujesz jednego źródła, z którego możesz pobrać swoje identyfikatory. Na przykład w Oracle użyłbyś sekwencji. W MySQL możesz utworzyć tabelę identyfikatorów tylko w tym celu:

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

Tak więc za każdym razem, gdy wstawiasz rekord do jednej ze swoich tabel, musisz podać identyfikator (ponieważ nie jest on automatycznie pobierany). Otrzymasz identyfikator z wstawką do tabeli identyfikatorów, a następnie wywołasz LAST_INSERT_ID() MySQL.

Mniej bezpieczną, ale prostszą alternatywą byłoby rozpoczęcie identyfikatorów z różnymi przesunięciami:

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

Działa to tak długo, jak długo Twoje identyfikatory pozostają w żądanym zakresie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego kolumna tekstowa nie może mieć wartości domyślnej w MySQL?

  2. Brak duplikatów w zapytaniu SQL

  3. Używanie operatora LIKE MySQL dla pól zakodowanych w JSON

  4. Ukryte funkcje MySQL

  5. Korzystanie z prostego dostawcy członkostwa z mysql