2012-07-03 2 views
1

InnoDB MySQL 데이터베이스를 사용하고 두 번째 키에서 자동 증가를 허용하는 그룹화 된 기본 키에 해당하는 항목이 있습니까? 내가 좋아하는 뭔가를 할 수의 MyISAM에 대한 그래서MySQL : InnoDB를 사용한 그룹화 된 기본 키

CREATE TABLE images (
    parent_id INT(11) NOT NULL, 
    image_id INT(11) AUTO_INCREMENT, //will this work with a grouped primary key? 
    source_url VARCHAR(255) NOT NULL, 
    caption VARCHAR(255) NOT NULL, 
) ENGINE = InnoDB; 

:

는 내가 구현하는 시도하고 저장하는 이미지 URL의 같은 부모 개체의 ID 뭔가를 기반으로 테이블

PRIMARY KEY(parent_id, image_id) 

을 [ (미안 내 SQL이 매우 강한되지 않습니다)가

delimiter // 
DROP TRIGGER IF EXISTS test_img_trigger; 
CREATE TRIGGER test_img_trigger BEFORE INSERT ON venue_images 
FOR EACH ROW 
BEGIN 
DECLARE img_id INT UNSIGNED DEFAULT 0; 

SELECT image_id + 1 INTO img_id FROM venue_images WHERE venue_id = NEW.venue_id; 
UPDATE venue_images SET image_id = img_id WHERE venue_id = NEW.venue_id; 

END IF; 
END;// 
delimiter; 
+0

기본 키가 아닌 그룹화 된 열의 키를 만듭니다 – diEcho

답변

0

이 경우 다른 사람에게 도움이 될 수있는 경우 이것이 해결책입니다.

MySQL이 아직 (또는 적어도 내 버전 5.1.53) 트리거가 트리거를 호출하는 테이블을 업데이트하는 기능을 지원하기 때문에 단순히 트리거를 사용할 수 없습니다. 그래서 시퀀스 테이블 생성 :

CREATE TABLE image_seq (
    parent_id INT(11) NOT NULL, 
    catagory INT(11) NOT NULL, 
    next_seq_id INT(11) NOT NULL, 
    KEY(catagory), 
    PRIMARY KEY(parent_id, catagory); 
); 

을 그리고 이미지 테이블에 트리거 생성 : 그 최적의 솔루션이 있지만, 작동 및 허용하는 경우 나 이미지 번호를 추적 할

CREATE TRIGGER bi_image_trig 
BEFORE INSERT ON images 
FOR EACH ROW 
BEGIN 

DECLARE id INT UNSIGNED DEFAULT 1; 
SELECT next_seq_id + 1 INTO id FROM image_seq WHERE parent_id=NEW.parent_id AND  catagory=NEW.catagory; 
SET NEW.image_id = id; 
UPDATE image_seq SET next_seq_id=id WHERE parent_id=NEW.parent_id AND catagory=NEW.catagory; 

END; 

확실하지 않음을 각 부모 객체에 대한 표기법.

0

: 같은 트리거를 사용하여 편집] 뭔가를 할 것입니다 하나의 자동 열일 수 있으며 key으로 정의해야합니다. 이것을 확인하십시오


CREATE TABLE images (
    parent_id INT(11) NOT NULL, 
    image_id INT(11) Not Null AUTO_INCREMENT, 
    source_url VARCHAR(255) NOT NULL, 
    caption VARCHAR(255) NOT NULL, 

    key(image_id),       -- add as a key  
    PRIMARY KEY(parent_id, image_id) 
) ENGINE = InnoDB; 
+0

고마워요, 실제로이 기능이 작동하지만 parent_id와 관련하여 image_id 필드가 자동 증가 만하면 각 parent_id는 1에서 시작하는 수많은 image_id를 갖게됩니다. – adamK

+0

이렇게하려면 자신 만의 커스텀'function'이나'trigger'를 생성해야합니다. –

+0

원본 게시물에 내가 추가 한 내용이 충분합니까? – adamK