2013-07-04 32 views
2

我有一個名爲testing的表,其中包含一個包含MEDIMTEXT類型的列。
在TEXT數據類型中連接字符串mysql

mysql> desc testing; 
+-------+------------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+-------+------------+------+-----+---------+-------+ 
| id | tinyint(4) | YES |  | NULL |  | 
| data | mediumtext | YES |  | NULL |  | 
+-------+------------+------+-----+---------+-------+ 
2 rows in set (0.00 sec) 

而且表的內容是like--

mysql> select * from testing; 
+------+--------------------------------+ 
| id | data       | 
+------+--------------------------------+ 
| 1 | This is the first data entered.| 
+------+--------------------------------+ 
1 row in set (0.00 sec) 

在ID = 1名爲data的專欄中,我想連接另一個字符串EX- 「的毗連我」使它看起來像「這是進入的第一個數據。CONCAT我」

我可以通過使用

UPDATE testing SET data=CONCAT(data,'Concat me') WHERE id=1; 

但我認爲它會使整個字段先被讀取,然後串聯,並最終將新創建的字符串替換爲前一個字符串。
如果文本太長,則需要很長時間才能完成。
喜歡 - 如果有文字的15 MB和文字CONCAT的10 bytes,然後15 MB將被讀取,那麼10個字節的數據連接起來,然後15 MB + 10個字節寫回的數據。
我想問一下,是否存在任何其他方法,以便將字符串連接起來,而不是替換完整的字符串?
這樣只有10個字節被寫入數據庫。
可能是我錯了,mysql將管理該命令以使其高效工作。

回答

0

您的update聲明完全正常。如果您的data列中有索引,那麼您的更新可能會更慢,在這種情況下,您可以禁用索引或在更新之前將其刪除,並在更新完成後將其添加回來。

+0

謝謝你的回答。我沒有關於該專欄的任何索引。我加入一條線將以下問題:「如果有15 MB的文字和10個字節的文本CONCAT,那麼15 MB將被讀取,那麼10個字節的連結數據,然後15 MB + 10個字節寫回的數據。」 。會發生這種情況還是隻有10個字節會寫入數據庫? –

+0

我相信在'concat'函數中會有'data'的查詢。然後'concat'函數返回更新後的字符串,然後將其設置在'data'列中。我不認爲有任何這樣的功能可以讓你像你想要的那樣添加'Concat me'。看看'replace'函數(http://dev.mysql.com/doc/refman/5.0/en/replace.html);它可能是類似於你想要的東西,但因爲你是在字符串末尾添加額外的數據,我不知道我們怎樣才能使它發揮作用。 – vee