2011-06-22 11 views
5

Czy to możliwe w MySql? Czy mogę mieć automatycznie zwiększający się klucz podstawowy poprzedzony literą, coś w stylu R1234, R1235, R1236 ... ect ??MySql automatycznie zwiększający się alfa-numeryczny klucz podstawowy?

+0

Nie jest ekspertem MySQL, ale możesz sprawdzić, czy obsługuje sekwencje. – Limey

+0

Jaki jest cel? Wygląda na to, że naruszasz całkiem podstawową zasadę projektowania baz danych. Kolumna powinna zawierać tylko jedną informację. Łączenie takich znaków alfanumerycznych jest często oznaką naruszenia tej zasady normalizacji. Nie zawsze, ale zazwyczaj. –

Odpowiedz

10

Co można zrobić, to przechowywać klucz jako dwie kolumny. Przedrostek char i automatycznie inkrementujący int, oba są pogrupowane dla klucza podstawowego.

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

Uwaga: działa to tylko w przypadku typów tabel MyISAM, a nie InnoDB. –

+0

Potrzebujesz tylko jednej litery jako przedrostka, np. R123, więc powinieneś użyć CHAR (1) zamiast CHAR (30), aby zaoszczędzić miejsce. Jeśli potrzebujesz dwóch liter jako przedrostka, np. RG123, powinieneś użyć CHAR (2). –

+0

Chciałbym uniknąć klucza złożonego, jeśli wiodąca postać będzie stała. Identyfikacja rekordu za pomocą pary zmiennych staje się dość kłopotliwa. –

2

można to zrobić za pomocą dwóch takich pól. ale nie można tego zrobić za pomocą jednego pola zgodnie z moją wiedzą.

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

Nie, ale dla tabel MyISAM można utworzyć indeksu wielu kolumn i umieścić pole auto_increment na kolumnie wtórnym, więc trzeba będzie prawie taki sam prosisz:

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 

Można uzyskać więcej informacji od here Uwaga: to nie zadziała dla silnika INNODB

Powiązane problemy