sql >> データベース >  >> RDS >> Mysql

複数のデータテーブルで一意のAIIDを生成する

    私はあなたの懸念を理解しています。テクニカル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を取得するためのソースが1つ必要です。たとえば、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');
    

    したがって、テーブルの1つにレコードを挿入するときは常に、IDを指定する必要があります(自動的に取得されないため)。 IDテーブルに挿入された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が目的の範囲内にある限り機能します。



    1. MYSQL PHP警告:mysql_query()はパラメーター1が文字列であることを期待しています

    2. オートコンプリートのためにMYSQLの会社名とPHPのあいまい一致を行うにはどうすればよいですか?

    3. WHERE句が検索フォームから動的に構築されるときにSQLインジェクションから保護するにはどうすればよいですか?

    4. 文字列を日付phpに変換します