我有一个名为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会管理命令以使其高效运行。
concat
函数中会查找data
。然后,concat
函数将更新的字符串返回,并设置在data
列上。我不认为有任何函数可以像你希望的那样添加“Concat me”。请看一下replace
函数(http://dev.mysql.com/doc/refman/5.0/en/replace.html);这可能类似于你想要的东西,但由于你在字符串末尾添加了额外的数据,我想知道我们如何使它起作用。 - vee