あとから追加する以前に、複合キーの第二キー以降にAUTO_INCREMENT属性はつけられないようです。
たとえばつぎのようにすると、複合キーのひとつにAUTO_INCREMENT属性を付与させること自体は可能です。
sql
1CREATE TABLE body.group_artist_relations
2(
3 group_id INT NOT NULL,
4 artist_id INT NOT NULL AUTO_INCREMENT,
5 pk_group_artist_relations INT NOT NULL,
6 CONSTRAINT PRIMARY KEY (artist_id, group_id) -- (group_id, artist_id) ではなく
7);
http://www.dbonline.jp/mysql/table/index7.html
しかしながら、テーブル1つに対して連番が付される仕様がAUTO_INCREMENT属性ですので(上記ページご参照)、仮に (group_id, artist_id) の順で主キーを定義できたとしても、group_idの値と関係なくartist_idは+1ずつされていくでしょう。
[group_id, artist_id]
100, 1
120, 2
100, 3
100, 4
115, 5
group_id の値各々において連番を付与したいのでしたら
[group_id, artist_id]
100, 1
120, 1
100, 2
100, 3
115, 1
解決方法として、INSERTトリガーで定義する方法があります。
http://www.dbonline.jp/mysql/trigger/index1.html
sql
1CREATE TRIGGER trigger1 BEFORE INSERT ON body.group_artist_relations
2 FOR EACH ROW BEGIN
3 DECLARE newid INT;
4 SELECT IFNULL(MAX(artist_id) + 1, 初期値) INTO @newid FROM group_artist_relations WHERE group_id = new.group_id;
5 SET new.artist_id = @newid;
6 END
関連行がDELETEされたときにつじつまが合わなくなる可能性がありますので、関連テーブルには参照制約(FOREIGN KEY .. REFERENCES...)を指定しておくことをおすすめします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/12/02 14:33