MySQL автоинкремент плюс буквенно-цифровые символы в одном столбце - PullRequest
0 голосов
/ 04 марта 2010

Я новичок в MySQL из Oracle. У меня есть требование создать таблицу с первичным ключом в одном столбце, но в следующем формате.

X-A письмо с указанием страны происхождения, например S для Испании, Z для Зимбабве e.tc (у нас только пять стран происхождения)

YYYYMMDD - Дата в этом формате,
9999 - 4-значный офисный код.
9999999 - 7 правых порядковых номеров из последовательности в Oracle (автоматическое увеличение в MySQL)
Это дает мне первичный ключ, такой как Z2010013150110000001, в качестве первичного ключа.

У меня вопрос, как мне сгенерировать часть 9999999 в MySQL. В Oracle это было бы

select 'Z'||to_char(sysdate, 'YYYYMMDD')|| 5011||cust_id.nextval from dual;

1 Ответ

3 голосов
/ 04 марта 2010

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 действительно любит, чтобы его ПК были числовыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...