【问题标题】:Concatenate a string in TEXT data type mysql连接 TEXT 数据类型 mysql 中的字符串
【发布时间】:2013-07-02 16:36:51
【问题描述】:

我有一个名为 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 的列中,我想连接另一个字符串 ex-“Concat me” 使其看起来像 “这是输入的第一个数据。联系我”

我可以通过使用来做到这一点

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

但我认为它会先读取整个字段,然后连接,最后将新创建的字符串替换为前一个。
如果文本太长,则需要一个有很多时间这样做。
比如 - 如果有 15 MB 的文本和 10 bytes 要连接的文本,则将读取 15 MB,然后连接 10 个字节的数据,然后写回 15 MB+ 10 个字节的数据。
我想问有没有其他方法让要连接的字符串最后添加而不是替换完整的?
这样只有 10 个字节被写入数据库。
可能是我错了,mysql 将管理命令以使其有效地工作。

【问题讨论】:

    标签: mysql performance text concatenation


    【解决方案1】:

    您的update 声明非常好。如果您的data 列中有索引,那么是的,您的更新可能会更慢,在这种情况下,您可以禁用索引或在更新之前将其删除,并在更新完成后将其添加回来。

    【讨论】:

    • 感谢您的回答。我在该列上没有任何索引。我在问题中添加了一行 - “如果有 15 MB 的文本和 10 个字节的文本要连接,那么将读取 15 MB,然后连接 10 个字节的数据,然后写回 15 MB + 10 个字节的数据。” .会发生这种情况,还是只会将 10 个字节写入数据库?
    • 我相信在concat 函数中会查找data。然后concat 函数返回更新后的字符串,然后将在data 列上设置。我不认为有任何这样的功能可以让你像你希望的那样添加“Concat me”。看看replace函数(dev.mysql.com/doc/refman/5.0/en/replace.html);它可能与您想要的类似,但是由于您在字符串末尾添加了额外的数据,我想知道我们如何才能使其工作。
    猜你喜欢
    • 2016-03-18
    • 2011-01-07
    • 1970-01-01
    • 2011-06-01
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    相关资源
    最近更新 更多