2012-08-23 51 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」(管理員)。 –