2011-06-22 23 views
5

Bu, MySql'de kullanılabilir mi? R1234, R1235, R1236 ... vb gibi bir harfle ön eklenmiş bir otomatik artışlı Birincil Anahtar alabilir miyim?MySql otomatik artırım Alfa nümerik birincil anahtar?

+0

için çalışmayacaktır. MySQL uzmanı değil ama sekansları destekleyip desteklemediğini kontrol etmek isteyebilirsiniz. – Limey

+0

Amaç nedir? Veri tabanı tasarımının oldukça basit bir kuralını ihlal ettiğinize benziyor. Bir sütun sadece tek bir bilgi parçası içermelidir. Bunun gibi alfa-nümeriklerin birleştirilmesi, genellikle bu normalleşme kuralının ihlal edildiğine işarettir. Her zaman değil, ama genellikle. –

cevap

10

Yapabildiğiniz anahtarı iki sütun olarak saklamaktır. Her ikisi de birincil anahtar için gruplanmış bir char öneki ve bir otomatik artışlı int.

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

Not Bu, yalnızca MyISAM için çalışır, InnoDB tablo türleri için geçerli değildir. –

+0

Önek olarak sadece bir harfe ihtiyacınız var, yani R123, böylece yerden tasarruf etmek için CHAR (30) yerine CHAR (1) kullanmalısınız. Önek olarak iki harfe, yani RG123'e ihtiyacınız varsa, o zaman CHAR (2) kullanmış olmalısınız. –

+0

Eğer öncü karakter sabit olacaksa, bileşik tuşlardan kaçınırım. Bir değişkenin bir çift ile tanımlanması, çizgiyi oldukça dağınık hale getirir. –

2

Bunun gibi iki alanla yapabilirsiniz. ama bunu benim için bir alanla yapamazsın.

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

Hayır ama MyISAM tablolar için bir çok sütunlu endeksi oluşturabilir ve ikincil sütun üzerinde auto_increment alanı koymak, bu yüzden hemen hemen aynı soruyorsun sahip olacaktır:

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 

yapabilirsiniz here 'dan daha fazla ayrıntı edinin Not: INNODB motoru

İlgili konular