當前位置:首頁 » 操作系統 » 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 13:29:11 瀏覽:415
javaweb開發教程視頻教程 發布:2025-07-05 13:24:41 瀏覽:664
康師傅控流腳本破解 發布:2025-07-05 13:17:27 瀏覽:225
java的開發流程 發布:2025-07-05 12:45:11 瀏覽:669
怎麼看內存卡配置 發布:2025-07-05 12:29:19 瀏覽:271
訪問學者英文個人簡歷 發布:2025-07-05 12:29:17 瀏覽:820
1970linux 發布:2025-07-05 12:12:43 瀏覽:109
解壓挑刺 發布:2025-07-05 12:12:12 瀏覽:537
rarlinux壓縮 發布:2025-07-05 12:08:52 瀏覽:399
手機點菜app怎麼連接電腦伺服器 發布:2025-07-05 11:13:05 瀏覽:944