java - 如何高效更新表的列值?

标签 java mysql sql-update

我有一个包含 30851204 行的表,我想更新其中一列的值,并且我正在寻找一种有效的方法,例如使用以下代码更新整个列的值。而不是读取每个值并更新其在表中的值

UPDATE table1 SET column1 = 1

列值采用以下一般形式:

<http://rdf.freebase.com/ns/m.0zzzr2k> 

我想将每个此类值更新为 URL 路径的最后一段,因此在上面的示例中只需 m.0zzzr2k 即可。以下Java代码计算所需的值,但我不知道如何在MySQL中编写等效的值。

String str[]= typ.split("<http://rdf.freebase.com/ns");
typ=str[1].substring(0, (str[1].length()-1));

最佳答案

正如您所意识到的,使用 SQL 而不是 Java 更新列会更加高效。

根据要更新的列中存储的值的模式,解决方案可能就像使用 MySQL 的 RIGHT() 一样简单。用于抓取列中最后 n 个字符的字符串函数:

UPDATE table1 SET column1 = RIGHT(column1, 9)

如果您想为所有行提取相同数量的字符,这应该可行...取决于您的数据。

或者,如果您总是想要最后一个 / 之后的字符串的最后一部分,您可以使用 SUBSTRING_INDEX() :

UPDATE table1 SET column1 = SUBSTRING_INDEX(column1, '/', -1)

同样,这取决于您的数据格式。

还支持正则表达式,但在不完全了解您的数据格式的情况下尝试猜测适当的模式是没有意义的。

关于java - 如何高效更新表的列值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33744618/

相关文章:

php - 数据未正确传递到 php 服务器

mysql - UPDATE 和 JOIN 在 MySQL 中导致语法错误

php - 更新数据库中的所有表

mysql - 如何正确格式化我的 UPDATE 语句?获取不唯一的表/别名错误

java - 对于 Java 中的按位运算,我是否需要关心 Java 中的大多数数字类型是否已签名?

c# - Java 的 "for (String currLine: allLines)"的 C# 等价物是什么?

mysql - SQL:查询格式化

mysql - 将 MySQL 查询转换为 Laravel

java - 为什么serialVersionUID 对于可序列化类来说是 long 类型

java - Manifest spec/impl 与 pom 的版本