2012-08-23 50 views
0

可能重复:
How to insert the next highest number into the database如何连接和变更/更新表

我使用MYSQL

我有一个称为TeacherId列被自动递增,去像这样:

TeacherId 

1 
2 
3 
4 

我想要做的就是添加了字母“T”中的数字的前面,所以就变成:

TeacherId 

T1 
T2 
T3 
T4 

如何更新或alter table来做到这一点?

下面是我的尝试,但没有奏效:

UPDATE Teacher SET TeacherId = CONCAT('T',TeacherId) 
+2

如果是自动增量则其在数字领域。您不能在数字字段中输入“T”。您需要创建一个新字段,例如'VARCHAR(8)'。并把你的连接结果放在那里。 * [另外,请将错误消息提供给不起作用的查询。它们非常具有启发性。] * – MatBailie

+0

如果将列设置为AUTO_INCREMENT,则它必须是整数,在这种情况下,您无法向其添加字母。 –

+3

为什么你需要存储T?查询/显示数据时添加T.“教师”表中的其他任何东西都只能是T吗? –

回答

5

我强烈建议你考虑在查询时附加的T到显示而不是试图存储在每个单列一吨。我不明白以这种方式存储数据的目的,特别是如果您有其他使用其原生形式的TeacherId值的表。

如果您需要从管理员区分教师,然后两个念头:

  1. 表应该叫人才,而不是教师。
  2. 这仍然可以作为单独的列存储,例如, PersonnelType。

我知道你可能会被告知它应该显示为T3等,但他们肯定没有明确告诉你“我们希望你把T和3一起存储在同一列中,否则”。你可以向他们展示他们的T3,而不用将他们绑在一起,以一种可怕的和不可用的设计。

1

选择数据并自动添加字母T在TeacherId面前:

SELECT *, CONCAT('T', TeacherId) AS TeacherId2 FROM Teacher 
0

如果你一定要在你的表有它,请在您的表中的第二栏,让你创建看起来像:

CREATE TABLE `teacher` (

`teacherId` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`t` CHAR(10) NOT NULL DEFAULT '' 
) 

然后创建一个触发器,将您的第二列设置为与您的id串联的'T'。

delimiter | 

CREATE TRIGGER teacherInsert after INSERT ON teacher 
    FOR EACH ROW BEGIN 
    UPDATE teacher SET `t` = concat('T', teacherId); 
    END; 
| 

delimiter ; 

或者,你也可以做什么亚伦建议,只是让它在查询时间:

select teacherId, concat('T', teacherId) from teacher 
+0

MySQL是否有计算/计算列的概念?总的来说,我认为这比触发更容易管理。但在这种特殊情况下,我认为它不会奏效,因为还有其他信息需要确定前缀应该是“T”(老师)还是“A”(管理员)。 –