Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tạo ID AI duy nhất trên nhiều bảng dữ liệu

Tôi hiểu mối quan tâm của bạn. Một khi bạn quyết định thiết kế cơ sở dữ liệu của mình với các ID kỹ thuật, luôn có nguy cơ gây nhầm lẫn các ID. Trong khi

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

thay vì

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

có thể sẽ xảy ra lỗi,

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

thay vì

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

có thể sẽ không, và thời điểm bạn nhận thấy lỗi chương trình của mình có thể đã quá muộn để phân biệt các bản ghi xấu từ những bản ghi tốt. Dữ liệu của bạn sẽ nhất quán về mặt kỹ thuật, nhưng thực sự là một mớ hỗn độn.

Để khắc phục sự cố này, bạn cần một nguồn để lấy các ID của mình. Trong Oracle chẳng hạn, bạn sẽ sử dụng một chuỗi. Trong MySQL, bạn có thể tạo một bảng ID cho mục đích duy nhất này:

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

Vì vậy, bất cứ khi nào bạn chèn một bản ghi vào một trong các bảng của mình, bạn phải chỉ định một ID (vì nó không được tự động nhận). Bạn nhận được ID bằng cách chèn vào bảng ID của mình và sau đó gọi LAST_INSERT_ID () của MySQL.

Một giải pháp thay thế kém an toàn hơn nhưng đơn giản hơn sẽ là bắt đầu các ID ở các hiệu số khác nhau:

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

Điều này hoạt động miễn là ID của bạn ở trong phạm vi mong muốn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tăng tốc (Hàng loạt) Chèn vào MySQL bằng Python

  2. Chia chuỗi được phân tách bằng dấu phẩy thành các hàng trong mysql

  3. Chèn địa chỉ IP của các tệp đã tải xuống vào mysql

  4. Lỗi xuất hiện trong sql khi cố gắng thêm nhiều khóa ngoại

  5. cách lấy các đối tượng tương tự dựa trên thẻ