0

私は次の表を持っています

SNo Value Item

ここで、Sno は別のテーブルにも存在する列です。今、私が必要としているのは、sno の値が定数の場合にインクリメントを続け、sno の値が変化すると 0 に戻り、再びインクリメントを開始する自己インクリメント フィールドです。これを行う方法はありますか?

4つの列があるとしましょう:

SNO |Value |Item | AUtoIncrementingField
1    344      a            0 
1    345      b            1 
1    346      c            2 
2    568      d            0 

したがって、このテーブルに挿入すると、SNO の値が元の値から変更された場合、自動インクリメント フィールドの値は 0 に戻るはずです。これを行う組み込みの方法はありますか、または mysql の上にコードを記述しますこれを達成するために。そうでない場合、snoの特定の値に属する各値/アイテムを一意に識別するために必要な他のオプションは何ですか?

4

1 に答える 1

1

これは InnoDB では役に立ちませんが、MyISAM がこの機能をネイティブにサポートしていることは指摘しておく価値があります。UsingAUTO_INCREMENTの下に記載されているように:

MyISAM ノート

MyISAM表の場合、複数列索引の副列に指定できますAUTO_INCREMENT。この場合、AUTO_INCREMENT列の生成値は として計算されます。これは、データを順序付けられたグループに入れたい場合に便利です。MAX(auto_increment_column) + 1 WHERE prefix=given-prefix

CREATE TABLE 動物 (
    grp ENUM('魚','哺乳類','鳥') NOT NULL,
    ID MEDIUMINT NOT NULL AUTO_INCREMENT、
    name CHAR(30) NOT NULL,
    主キー (グループ、ID)
) エンジン=MyISAM;

INSERT INTO animal (grp,name) 値
    ('哺乳類','犬'),('哺乳類','猫'),
    ('bird','penguin'),('fish','lax'),('mammal','whale'),
    ('鳥','ダチョウ');

SELECT * FROM 動物 ORDER BY grp,id;

どちらが返されますか:

+--------+----+---------+
| | グループ | ID | 名前 |
+--------+----+---------+
| | 魚 | 1 | 緩い |
| | 哺乳類 | 1 | 犬 | 犬 |
| | 哺乳類 | 2 | 猫 | 猫 |
| | 哺乳類 | 3 | クジラ | クジラ |
| | 鳥 | 1 | ペンギン |
| | 鳥 | 2 | ダチョウ | ダチョウ |
+--------+----+---------+

この場合 (AUTO_INCREMENT列が複数列インデックスの一部である場合)、いずれかのグループでAUTO_INCREMENT最大の値を持つ行を削除すると、値が再利用されますAUTO_INCREMENT。これは、値が通常再利用されないMyISAMテーブルでも発生します。AUTO_INCREMENT

于 2012-10-14T02:03:34.583 に答える