2012-07-03 64 views
1

是否有與使用InnoDB MySQL數據庫的分組主鍵等價的並允許第二個鍵自動遞增?MySQL:使用InnoDB分組的主鍵

我想實現是一個表,基於父對象ID類似的店面形象網址:

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; 

所以對MyISAM我可以這樣做:

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

there只能是一個自動列,並且必須定義爲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

謝謝,這的確的作品,但我希望image_id字段只能相對於parent_id自動增量,以便每個parent_id將有許多image_id從1開始。 – adamK

+0

那麼你需要創建自己的定製'函數'或'觸發器'來做到這一點。 –

+0

是我添加到原始文章的東西,可能就足夠了? – adamK