Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/03/2013, 16:08
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Campo incremental

Hola Alfilblanco:

Vamos por partes. No es posible tener un campo compuesto que se comporte tal como lo deseas, pero no sé si lo necesitas físicamente en la tabla o si en realidad lo único que deseas es visualizarlo de esa forma.

Hace tiempo tuve una situación similar, pero te repito, en realidad lo único que se necesitaba era presentar de manera visual el campo con este formato, no era necesario que existiera el campo físicamente en la bd... Lo que se hizo fue tener tres campos, un campo tipo fecha (donde se almacenaba la fecha de creación del registro), un campo incremental, definido como smallint, de longitud 4 y marcado como cero fill y un campo varchar donde almacenábamos un caracter de control... para mostrar simplemente concatenabamos los valores, algo así:

Código:
CREATE TABLE `pruebas`.`clave_compuesta`(
`fecha` DATE NOT NULL , 
`incremental` SMALLINT(4) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT UNIQUE , 
`tipo` VARCHAR(1) NOT NULL , 
PRIMARY KEY (`fecha`, `incremental`, `tipo`) );
Código MySQL:
Ver original
  1. mysql>   SELECT * FROM clave_compuesta;
  2. +------------+-------------+------+
  3. | fecha      | incremental | tipo |
  4. +------------+-------------+------+
  5. | 2013-03-06 |        0001 | A    |
  6. | 2013-03-06 |        0002 | C    |
  7. | 2013-03-06 |        0003 | A    |
  8. | 2013-03-06 |        0004 | C    |
  9. +------------+-------------+------+
  10. 4 rows in set (0.02 sec)
  11.  
  12. mysql> SELECT
  13.     ->   fecha, incremental, tipo,
  14.     ->   CONCAT(YEAR(fecha),'-', incremental, '-', tipo) clave
  15.     -> FROM clave_compuesta;
  16. +------------+-------------+------+-------------+
  17. | fecha      | incremental | tipo | clave       |
  18. +------------+-------------+------+-------------+
  19. | 2013-03-06 |        0001 | A    | 2013-0001-A |
  20. | 2013-03-06 |        0002 | C    | 2013-0002-C |
  21. | 2013-03-06 |        0003 | A    | 2013-0003-A |
  22. | 2013-03-06 |        0004 | C    | 2013-0004-C |
  23. +------------+-------------+------+-------------+
  24. 4 rows in set (0.00 sec)

En cuanto a lo de resetear a 0000, lo tienes que hacer con un ALTER TABLE

Código:
ALTER TABLE clave_compuesta AUTO_INCREMENT = 1;
Programando un job para que se ejecute en el primer segundo del 01 de enero de cada año.

Otra opción es que mediante procedimientos controles mediante procedimientos almacenados el insert hacia esta tabla, pero esa es otra historia.

Saludos
Leo.