在MySQL中拼接TEXT数据类型的字符串

3

我有一个名为testing的表,其中包含一列类型为MEDIMTEXT的字段。

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)

表格内容如下:

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

在id=1的名为data的列中,我希望将另一个字符串连接起来,例如" Concat me ",使其看起来像"这是输入的第一个数据。Concat me"
我可以通过使用以下代码实现:
 UPDATE testing SET data=CONCAT(data,'Concat me') WHERE id=1;

我认为应该先读取整个字段,然后进行连接,在最后将新生成的字符串替换为以前的字符串。
如果文本太长,这样做会花费很多时间。
例如 - 如果有 15 MB 的文本和 10 bytes 的文本需要连接,则会先读取 15 MB,然后连接 10 bytes 的数据,最后写回 15 MB+ 10 bytes 的数据。
我想问是否存在其他方法,使得要连接的字符串只需添加到末尾,而不是完全替换?
这样只需将 10 bytes 写入数据库。
也许我错了,mysql会管理命令以使其高效运行。

1个回答

1
你的update语句非常好。如果你在data列中有一个索引,那么你的更新可能会变慢,在这种情况下,你可以在更新之前禁用索引或删除它,并在更新完成后将其添加回去。

谢谢您的回答。我在那个列上没有任何索引。我在问题中添加了一行 - “如果有15 MB的文本和10字节的文本要连接,那么将读取15 mb,然后连接10字节的数据,然后写回15 MB + 10字节的数据。”这会发生还是只有10字节会被写入数据库? - Gaurav Sharma
我相信在concat函数中会查找data。然后,concat函数将更新的字符串返回,并设置在data列上。我不认为有任何函数可以像你希望的那样添加“Concat me”。请看一下replace函数(http://dev.mysql.com/doc/refman/5.0/en/replace.html);这可能类似于你想要的东西,但由于你在字符串末尾添加了额外的数据,我想知道我们如何使它起作用。 - vee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接