2010-03-04 164 views
0

我是來自Oracle的MySQL的新手。我有要求創建一個表中的主鍵在一列,但具有以下格式。MySQL自動增加加上一列中的字母數字

X-A寫出來的國家的信例如S西班牙,Z津巴布韋e.tc(我們只有起源的5個國家)

YYYYMMDD - 日期在格式,
9999 - 4位數代碼的辦公室。
9999999 - 7 Oracle中的序列的右填充序列號(在MySQL中自動遞增)
這給我一個主鍵,如Z2010013150110000001作爲主鍵。

我的問題是如何在MySQL中生成9999999的部分。在Oracle它會一直

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

有人不理解標準化... – DCookie 2010-03-04 16:40:08

回答

3

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 真的喜歡它的PK是數字。