1

InnoDB MySQLデータベースを使用し、2番目のキーで自動インクリメントを許可するグループ化された主キーに相当するものはありますか?

私が実装しようとしているのは、次のような親オブジェクトIDに基づいて画像のURLを格納するテーブルです。

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;
4

2 に答える 2

0

自動列は1つしか存在できず、として定義する必要があります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;
于 2012-07-03T04:26:14.940 に答える
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;

最適なソリューションかどうかはわかりませんが、機能し、各親オブジェクトのカテゴリで画像番号を追跡できます。

于 2012-07-04T01:05:05.903 に答える