2011-06-22 11 views
5

これはMySqlで可能ですか? R1234、R1235、R1236 ...のような文字をプレフィックスとする自動インクリメントのプライマリキーを使用できますか?MySqlの自動増分英数字主キー?

+0

MySQLの専門家ではありませんが、シーケンスがサポートされているかどうかを確認したい場合があります。 – Limey

+0

目的は何ですか?かなり基本的なデータベース設計のルールに違反しているように見えます。列には単一の情報のみを含める必要があります。そのような英数字を連結することは、この正規化の規則が侵害されていることを示していることがよくあります。いつもとは限りませんが、通常は。 –

答えて

10

キーを2つの列として保存することができます。 char接頭辞と自動インクリメントint。これらは両方とも主キー用にグループ化されています。

CREATE TABLE myItems (
    id INT NOT NULL AUTO_INCREMENT, 
    prefix CHAR(30) NOT NULL, 
    PRIMARY KEY (id, prefix), 
    ... 
+2

これはMyISAMでのみ機能し、InnoDBのテーブルタイプでは機能しません。 –

+0

接頭辞としてはR123の1文字しか必要ないので、スペースを節約するためにCHAR(30)ではなくCHAR(1)を使用する必要があります。接頭辞として2文字(RG123)が必要な場合は、CHAR(2)を使用してください。 –

+0

先頭の文字が定数の場合、複合キーは避けてください。変数のペアを持つレコードを特定することは、かなり混乱することになります。 –

2

このような2つのフィールドを使用するとできます。しかし、私の知る限り、あなたは1つのフィールドでそれを行うことはできません。

create table foo (
    code char, 
    id int unsigned not null auto_increment 
    primary key(id,code) 
); 
3

号しかし、MyISAMテーブルのためにあなたは、複数列のインデックスを作成することができますし、二列にAUTO_INCREMENTフィールドを置くので、あなたが求めているほとんど同じになります。

CREATE TABLE t1 (prefix CHAR(1) NOT NULL, id INT UNSIGNED AUTO_INCREMENT NOT NULL, 
..., PRIMARY KEY(prefix,id)) Engine = MyISAM; 
INSERT INTO t1(prefix) VALUES ('a'),('a'),('b'),('b'); 
SELECT * FROM t1; 
a 1 
a 2 
b 1 
b 2 

をすることができますhere 注:INNODBエンジンでは動作しません

関連する問題