2011-06-22 15 views
5

¿Es esto posible en MySql? ¿Puedo tener una clave principal autoincrementada, con el prefijo de una letra, algo así como R1234, R1235, R1236 ... ect?MySql autoincrementando tecla principal alfanumérica?

+0

No es un experto en MySQL en absoluto, pero es posible que desee comprobar si es compatible con las secuencias. – Limey

+0

¿Cuál es el propósito? Seguro que parece que estás violando una regla bastante básica de diseño de bases de datos. Una columna solo debe contener una sola información. Concatenar alfa-numéricos como ese es a menudo una señal de que esta regla de normalización está siendo violada. No siempre, pero por lo general. –

Respuesta

10

Lo que puedes hacer es almacenar la llave como dos columnas. Un prefijo char y un int incremental automático, ambos agrupados para la clave principal.

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

Tenga en cuenta que esto solo funciona para MyISAM, no para los tipos de tabla InnoDB. –

+0

Solo necesita una letra como prefijo, es decir, R123, por lo que debe usar CHAR (1) en lugar de CHAR (30) para ahorrar espacio. Si necesitaras dos letras como prefijo, es decir, RG123, deberías haber usado CHAR (2). –

+0

Evitaría la clave compuesta si el protagonista será constante. Identificar un registro con un par de variables se torna un poco complicado en el futuro. –

2

puede hacerlo con dos campos como este. pero no puedes hacerlo con un campo que yo sepa.

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

No. Pero para tablas MyISAM puede crear un índice de varias columnas y poner campo AUTO_INCREMENT en la columna secundaria, por lo que tendrá más o menos la misma que está pidiendo:

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 

Puede obtener más detalles de here Nota: no va a funcionar para el motor INNODB

Cuestiones relacionadas