¿Se puede dar formato a MySQL AUTO_INCREMENT?

Tengo una tabla en la que la llave primaria tiene formato 'BCB001', me gustaría saber si hay alguna manera de dar formato a AUTO_INCREMENT para que pueda llenar el campo que necesito.

0
задан 13.11.2016, 19:27
2 ответа

Поле увеличительный автомобиль был создан точно, чтобы пользователь его не коснулся, делая возможным производить изменения и удалять данные о DB, не производя бокового вреда. Кроме того, что облегчает ссылочную целостность тех же самых.

Если все это все еще не убедило тебя AUTO-INCREMENT он для int, не для признаков varchar, а следовательно ты не мог бы делать, что ты queriendo.

Я надеюсь помочь тебе. Привет

1
ответ дан 24.11.2019, 12:37

Решение состояло бы в том, чтобы создавать поле INT AUTO_INCREMENT в твоей таблице помимо кода, чтобы сохранять желанный формат.

CREATE TABLE `test` (
`id` int(11) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `cod` varchar(6) DEFAULT NULL,
  `nombre` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

Потом создавать Trigger, чтобы обновлять поле cod before (раньше), используя функцию Concat, чтобы прилагать установленный формат (BCB) с которым он возвращает LPad (я нумерую, количество, chararrellenar) наполняя с 0 в левую сторону, в которое devuelte функция LAST_INSERT_ID +1 (ultimoidinsertado), не превышая Length в этом примере его 3 (segundoparametro)

DELIMITER $$
CREATE TRIGGER tg_insert_test
BEFORE INSERT ON test
FOR EACH ROW
BEGIN
    if (SELECT COUNT(*) FROM prueba)=0   THEN
        SET NEW.cod= 'BCB001';
    else
        SET NEW.cod= CONCAT('BCB', LPAD(LAST_INSERT_ID()+1, 3, '0'));
  END IF;
END$$
DELIMITER ;

Чтобы вводить только он сделал бы INSERT классик.

INSERT INTO test (nombre) values ('Nombre1');
0
ответ дан 24.11.2019, 12:37