auto_increment не может быть просто частью поля, поэтому один столбец может быть стиркой. Так как насчет:
CREATE TABLE xxxxx (
id int unsigned not null auto_increment,
rest_of_that_key char(xx) not null,
// other goodies
PRIMARY KEY (id)
);
Тогда вы можете SELECT CONCAT(rest_of_that_key, LPAD(id, 7, '0')) AS full_key FROM xxxxx
.
Или даже лучше, так что вы можете использовать эти офисные коды и даты для фильтрации данных:
CREATE TABLE xxxxx (
id int unsigned not null auto_increment,
country_code char(1) not null,
sysdate date not null,
office_code smallint unsigned not null,
// other goodies
PRIMARY KEY (id),
KEY country_code (country_code)
// etc, index the useful stuff
);
Тогда вы можете использовать SELECT CONCAT(country_code, DATE_FORMAT(sysdate, '%Y%m%d'), office_code, LPAD(id, 7, '0')) AS full_key FROM xxxxx
и даже добавить WHERE office_code = 1256 AND sysdate >= '2010-01-01'
без необходимости каким-либо образом анализировать эту огромную строку.
Если вам действительно нужна эта огромная строка в качестве первичного ключа с одним полем, вам придется вручную увеличивать ее. Я все еще не рекомендовал бы делать это, хотя MySQL действительно любит, чтобы его ПК были числовыми.