mysql 事务中批量插入
时间: 2023-09-24 22:14:08 浏览: 50
在 MySQL 中,可以使用事务来实现批量插入数据。事务是指一组 SQL 操作,要么全部执行成功,要么全部不执行。如果在事务执行过程中出现错误,可以回滚事务,使得所有操作都不执行。
以下是一个使用事务和批处理插入的示例:
```
START TRANSACTION;
INSERT INTO table_name (column1, column2, column3) VALUES
(value1, value2, value3),
(value4, value5, value6),
(value7, value8, value9);
COMMIT;
```
在这个示例中,我们使用 `START TRANSACTION` 开始一个事务,使用 `COMMIT` 结束一个事务。在 `INSERT INTO` 语句中,我们可以一次性插入多条记录,通过逗号分隔记录。这样可以减少与数据库的交互次数,从而提高效率。
注意,在使用事务时,如果出现错误,需要使用 `ROLLBACK` 回滚事务,以恢复数据库状态。
相关问题
mysql数据库批量插入
以下是MySQL数据库批量插入的两种方式:
1.使用批处理模式
```python
import pymysql
# 连接数据库
conn = pymysql.connect(host='localhost', user='root', password='123456', database='test', charset='utf8mb4')
cursor = conn.cursor()
# 开启批处理模式
cursor.execute('SET AUTOCOMMIT=0')
cursor.execute('SET unique_checks=0')
cursor.execute('SET foreign_key_checks=0')
# 批量插入数据
sql = "INSERT INTO student (name, age) VALUES (%s, %s)"
data = [('Tom', 18), ('Jerry', 20), ('Mike', 22)]
cursor.executemany(sql, data)
# 提交事务
conn.commit()
# 关闭连接
cursor.close()
conn.close()
```
2.使用ORM框架的批量插入方法
```python
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from models import Student
# 连接数据库
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test?charset=utf8mb4')
DBSession = sessionmaker(bind=engine)
session = DBSession()
# 批量插入数据
data = [Student(name='Tom', age=18), Student(name='Jerry', age=20), Student(name='Mike', age=22)]
session.add_all(data)
session.commit()
# 关闭连接
session.close()
```
java mysql批量插入
是的,你可以使用Java JDBC对MySQL数据库进行批量插入。
以下是两种Java JDBC批量插入MySQL的方法:
1.使用addBatch()和executeBatch()方法[^1]
```java
//加载JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");
//连接MySQL数据库
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useUnicode=true&rewriteBatchedStatements=true", "root", "abc123");
//关闭自动提交
conn.setAutoCommit(false);
//创建预处理语句
PreparedStatement pst = conn.prepareStatement("insert into student(name, age) values(?,?)");
//循环添加数据到预处理语句中
for (int i = 0; i < 10000; i++) {
pst.setString(1, "name" + i);
pst.setInt(2, i);
pst.addBatch();
}
//执行批处理
pst.executeBatch();
//提交事务
conn.commit();
//关闭连接
pst.close();
conn.close();
```
2.使用addBatch()和executeLargeBatch()方法,执行更大的批处理
```java
//加载JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");
//连接MySQL数据库
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useUnicode=true&rewriteBatchedStatements=true", "root", "abc123");
//关闭自动提交
conn.setAutoCommit(false);
//创建预处理语句
PreparedStatement pst = conn.prepareStatement("insert into student(name, age) values(?,?)");
//循环添加数据到预处理语句中
for (int i = 0; i < 1000000; i++) {
pst.setString(1, "name" + i);
pst.setInt(2, i);
pst.addBatch();
//1万次提交一次
if (i % 10000 == 0) {
pst.executeLargeBatch();
}
}
//提交事务
conn.commit();
//关闭连接
pst.close();
conn.close();
```