2017-07-24 73 views
0

ID列设置为主键,自动递增。基于主键的SQL列名称

我想要第二列项目号,是否可以在SQL中设置这样的东西?或者我应该怎么做?

ID:1 projectnumber:Project001

ID:2 projectnumber:Project002

ID:N projectnumber:Project00n

+0

你甚至都不需要有柱,只是格式化此当你拉出来的数据,当你显示它在应用程序中。你所做的只是复制字符串“Project”并在标题旁边添加一个数字 - 这样浪费空间就非常非常不重要。 – Mjh

+0

听起来像是一个计算列:请参阅https://stackoverflow.com/questions/5222044/column-calculated-from-another-column – aschoerk

+0

MySQL 5.7您可以使用生成的列(GENERATED ALWAYS) –

回答

0

你能做到这在两个方面:

或者使用触发器或做从数据库中检索记录时:

触发器:插入

CREATE TRIGGER `yourtable_after_insert` AFTER INSERT ON `yourtable` FOR EACH ROW BEGIN 
    UPDATE yourtable 
    SET projectnumber = CONCAT('project', NEW.id) 
    WHERE id = NEW.id; 
END; 

或 只是在您的选择查询中执行该CONCAT事情,或者甚至在PHP的逻辑中更好。考虑你想翻译你的应用程序的可能性。你会存储重复的信息,以及...

如下所示:NEW.id将无法正常工作。 因此,使用LAST_INSERT_ID()代替:

CREATE TRIGGER `yourtable_after_insert` AFTER INSERT ON `yourtable` 
FOR EACH ROW BEGIN 
    UPDATE yourtable 
    SET projectnumber = CONCAT('project', LAST_INSERT_ID()) 
    WHERE id = LAST_INSERT_ID(); 
END; 

但还是:这将是重复的内容

+0

在BEFORE触发器中,NEW AUTO_INCREMENT列的值为0,而不是实际插入新行时自动生成的序列号。 – Cuchu

+0

“NEW”不适用于“AFTER”和“set column_name”不起作用。 – Cuchu