2012-01-09 2 views
1

두 개의 필드가 기본 키 (ID & 계정) 인 MySQL 테이블이 있고 ID에 AUTO_INCREMENT가 있습니다. 다음 MySQL의 테이블에 이 결과 :두 개의 기본 키 및 자동 증가

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

내 구성에서 어떤 문제가 :

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

는 그러나, 나는 다음과 같은 결과 (각 계정에 대한 AUTO_INCREMENT를 다시 시작) 예상? 이 문제를 어떻게 해결할 수 있습니까?

감사합니다.

+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

, 당신은이 같은 트리거를 사용할 수 있습니다

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# 

참고! delimiter 컬럼은 # 위의 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 
관련 문제