У меня есть таблица с базовым автоматическим увеличением под названием post_id. У меня есть и другие столбцы: tag_id и tag_name.

В настоящее время, когда я вставляю в эту таблицу, post_id будет автоматически увеличиваться. Но я также хочу сделать автоматическое приращение tag_id в зависимости от того, что такое tag_name. Если tag_name, например, "A", то tag_id должно быть 1. Следующая вставка: tag_name - "A" tag_id - 2. Однако следующая вставка tag_name будет "B", tag_id теперь будет 1. и т. д. и т. д.

2
Mike5050 16 Дек 2017 в 19:01

1 ответ

Лучший ответ

И MyISAM, и InnoDB поддерживают только одно автоматическое приращение для каждой таблицы.

Управление любой функцией автоинкремента для каждой группы не может работать в подсистеме хранения, поддерживающей одновременные обновления, из-за условий гонки.

MyISAM поддерживает автоинкремент в качестве вторичного столбца ключа, поэтому он нумерует каждое значение в первом столбце одного и того же ключа независимо. Но это все равно не сработает для вас, потому что MyISAM не поддерживает два автоматических столбца в таблице.

mysql> create table MyTable (
    -> post_id int auto_increment primary key,
    -> tag_name varchar(10),
    -> tag_id int auto_increment,
    -> unique key (tag_name, tag_id)
    -> ) engine=myisam;
ERROR 1075 (42000): Incorrect table definition; there can be only one
auto column and it must be defined as a key

Вам придется пронумеровать свой tag_id вручную. А это означает, что вы не можете поддерживать одновременные обновления этой таблицы.

ИМО, вам следует переосмыслить то, что вы пытаетесь сделать.

2
Bill Karwin 16 Дек 2017 в 20:11