当前位置:首页 » 操作系统 » mysql批量更新数据库

mysql批量更新数据库

发布时间: 2023-01-20 20:34:55

1. mysql 批量更新10000+的数据,有什么效率比较高的方法

首先, 插入上万条数据,对于数据库来说并不是“很大”的工作量,一般配置的笔记本电脑都可以在1分钟内完成。 所以最简单、最灵活的办法还是写SQL语句。

如果不希望DB编译器每次执行都编译SQL的话,可以使用存储过程,直接调用,性能上会好很多。也比较简单。
(几万条数据怎么地也得要时间去处理,所以不可能特别快的。)

如果由于各种原因,导致这个插入还是很慢, 而且你的MYSQL又是5.0以上版本的话,可以使用BulkCopy来进行批量操作。
BulkCopy的原理就是Client直接把一个数组(DataTable)传给DB,然后传入表名,所有的编译、操作都由DB自己完成,效率很高。
引用MySql.Data.dll , 调用MysqlBulkCopy函数即可。

这个函数在处理海量数据插入的时候效率尤为明显, 小量数据反而没什么优势,而且由于传入的DataTable格式必须和表的字段一模一样(空的列也要传进去),导致C#要写很多代码来构造这个数组,所以要你自己权衡用还是不用。
我在自己的电脑上批量插入一亿条数据,Insert写法大概需要1小时,BulkCopy大概只需要5分钟。

2. 关于mysql的批量更新

mysql数据批量更新
update a set b=1 where id in ($ids) and id !=$_GET['id'];

update a set b=0 where id not in ($ids) and id !=$_GET['id'];

3. 如何提高Mysql 批量插入和更新 数据库的效

需要将大量数据(大概5W条)插入MySQL数
据库,用普通的SQL
Statement执行,时间大概是几分钟。于是想到用PreparedStatement,但是改了之后发现效率并没有很大的提升。不成,想到了
load data local
infile...命令,以前一直认为这条命令仅限MySQL终端上使用而不是标准的SQL语句,今天看了几篇文章之后有了很大的收获。

1. 使用PreparedStatement batch operation

以前使用PreparedStatement性能没有很大提升的原因在于:

没有使用批处理方法
在语句执行之前应关闭事务自动提交,语句执行完之后再提交

public
void batchLoad(Connection connection)

{

try
{

connection.setAutoCommit(false);

BufferedReader reader =
new BufferedReader(new
FileReader("tfacts_result"));

String sqlString =
"insert into test(node1, node2, weight) values(?, ?, ?)";

PreparedStatement pstmt = connection.prepareStatement(sqlString);

String line =
null;

while(true)

{

line = reader.readLine();

if(line == null)

{

break;

}

String[] columns = line.split("\t");

for(int
i = 1; i <= columns.length; i++)

{

pstmt.setString(i, columns[i-1]);

}

pstmt.addBatch();

}

pstmt.executeBatch();

connection.commit();

pstmt.close();

reader.close();

}
catch (FileNotFoundException e) {

e.printStackTrace();

}catch
(SQLException e){

e.printStackTrace();

}catch
(IOException e){

e.printStackTrace();

}

2.使用load data local infile into tabel XXX(注意在文件中用\t将每列数据隔开)

public
void loadData(Connection connection)

{

long
starTime = System.currentTimeMillis();

String sqlString =
"load data local infile ? into table test";

PreparedStatement pstmt;

try
{

pstmt = connection.prepareStatement(sqlString);

pstmt.setString(1,
"tfacts_result");

pstmt.executeUpdate();

pstmt.close();

}
catch (SQLException e) {

e.printStackTrace();

}

long
endTime = System.currentTimeMillis();

System.out.println("program runs "
+ (endTime - starTime) + "ms");

}

测试了5W条数据,PreparedStatement耗时10s,而load data infile耗时3s。

4. mysql大量数据更新采用什么样的方式比较好,20w条数据一次更新

建缓冲区。比如其他类型的高速缓存(redis等)作为中间缓冲层。
数据的查询,更改首先在这个层处理,处理完再更新到对应的数据库。
注意额外增加锁,或者缓存机制防止缓存击穿,雪崩导致系统崩溃。

5. java mysql mybatis批量更新怎么弄

Java mysql mybatis批量更新数据库,采用以下写法即可执行,但是数据库连接必须配置:&allowMultiQueries=true

例如:jdbc:mysql://192.168.1.236:3306/test?useUnicode=true&amp;characterEncoding=UTF-8&allowMultiQueries=true
<updateid="batchUpdate"parameterType="java.util.List">

<foreachcollection="list"item="item"index="index"open=""close=""separator=";">
updatetest
<set>
test=${item.test}+1
</set>
whereid=${item.id}
</foreach>

</update>

MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.

6. mysql数据批量更新,谢谢

update a set b=1 where id in ($ids) and id !=$_GET['id'];

update a set b=0 where id not in ($ids) and id !=$_GET['id'];
这样应该可以解决你问题,怎么把两条语句合并,我就不清楚了,你查查

热点内容
快速计算法怎么算 发布:2025-07-05 07:08:12 浏览:138
php判断数组长度 发布:2025-07-05 07:07:26 浏览:146
苹果电脑取消共享文件夹 发布:2025-07-05 07:06:00 浏览:347
机器学习算法应用 发布:2025-07-05 07:01:17 浏览:34
万能解压缩王 发布:2025-07-05 06:51:56 浏览:543
手机怎么修改wifi密码名称 发布:2025-07-05 06:46:13 浏览:381
阿里云服务器bt安装 发布:2025-07-05 06:36:46 浏览:370
数据库组别 发布:2025-07-05 06:15:53 浏览:711
我的世界服务器怎样设置新手装备只能拿一次 发布:2025-07-05 06:15:53 浏览:985
缓存40集电视剧需要多少流量 发布:2025-07-05 05:56:44 浏览:64