2012-01-09 24 views
1

私は主キー(ID &アカウント)として2つのフィールドを持つMySQLテーブルを持っていますが、IDにはAUTO_INCREMENTがあります。 これは、次のMySQLのテーブルに結果:2つの主キーと自動インクリメント

ID | Account 
------------------ 
1  |  1 
2  |  1 
3  |  2 
4  |  3 

しかし、私は(各アカウントのAUTO_INCREMENTを再起動します)次のような結果を期待:

ID | Account 
------------------ 
1  |  1 
2  |  1 
1  |  2 
1  |  3 

私の設定で間違っていますか?これをどうすれば解決できますか?

ありがとうございます!

+2

あなたはどのエンジンを使用していますか? – Mark

答えて

1

説明している機能はMyISAMエンジンでのみ可能です。あなたは、このようなCREATE TABLE文を指定する必要があります。

CREATE TABLE your_table ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, account_id INT UNSIGNED NOT NULL, PRIMARY KEY(account_id, id) ) ENGINE = MyISAM;

0

あなたがInnoDBエンジンを使用している場合、あなたはこのようにトリガーを使用することができます。

CREATE TRIGGER `your_table_before_ins_trig` BEFORE INSERT ON `your_table` 
FOR EACH ROW 
begin 
declare next_id int unsigned default 1; 

    -- get the next ID for your Account Number 
    select max(ID) + 1 into next_id from your_table where Account = new.Account; 

    -- if there is no Account number yet, set the ID to 1 by default 
    IF next_id IS NULL THEN SET next_id = 1; END IF; 

    set new.ID= next_id; 
end# 

注意!上記のSQL文で区切り文字列は#です!あなたはこのような任意のAUTO_INCREMENT機能せず、それを作成した場合

このソリューションは、あなたのようなテーブルのために働く:

CREATE TABLE IF NOT EXISTS `your_table` (
    `ID` int(11) NOT NULL, 
    `Account` int(11) NOT NULL, 
    PRIMARY KEY (`ID`,`Account`) 
); 

今、あなたはこのように自分の価値観を挿入することができます。

INSERT INTO your_table (`Account`) VALUES (1); 
INSERT INTO your_table (`Account`, `ID`) VALUES (1, 5); 
INSERT INTO your_table (`Account`) VALUES (2); 
INSERT INTO your_table (`Account`, `ID`) VALUES (3, 10205); 

それはになりますこれは:

ID | Account 
------------------ 
1  |  1 
2  |  1 
1  |  2 
1  |  3 
関連する問題