MySQL 批量数据操作指的是在一次数据库交互中处理多条数据记录。这种操作可以显著提高数据处理的效率,因为它减少了与数据库服务器之间的通信次数。批量操作可以应用于插入、更新、删除等多种数据操作。
以下是一个使用 Python 和 MySQL Connector 进行批量插入的示例:
import mysql.connector
# 连接到 MySQL 数据库
db = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdatabase"
)
cursor = db.cursor()
# 准备要插入的数据
sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = [
('John', 'Highway 21'),
('Peter', 'Lowstreet 4'),
('Amy', 'Apple st 652'),
('Hannah', 'Mountain 21'),
('Michael', 'Valley 345'),
('Sandy', 'Ocean blvd 2'),
('Betty', 'Green Grass 1'),
('Richard', 'Sky st 331'),
('Susan', 'One way 98'),
('Vicky', 'Yellow Garden 2'),
('Ben', 'Park Lane 38'),
('William', 'Central st 954'),
('Chuck', 'Main Road 989'),
('Viola', 'Sideway 1633')
]
# 执行批量插入
cursor.executemany(sql, val)
# 提交事务
db.commit()
print(cursor.rowcount, "记录插入成功。")
# 关闭连接
cursor.close()
db.close()
原因:插入的数据超过了列定义的长度。
解决方法:
ALTER TABLE customers MODIFY COLUMN address VARCHAR(255);
原因:更新操作等待锁的时间超过了设定的超时时间。
解决方法:
SET GLOBAL innodb_lock_wait_timeout = 120; -- 设置为120秒
原因:多个事务相互等待对方释放锁,导致死锁。
解决方法:
RETRY
机制重试事务。import time
for i in range(3): # 最多重试3次
try:
cursor.execute("DELETE FROM customers WHERE status = 'inactive'")
db.commit()
break
except mysql.connector.errors.DatabaseError as err:
if err.errno == 1213: # 死锁错误
time.sleep(1) # 等待1秒后重试
db.rollback()
else:
raise
通过以上方法,可以有效解决 MySQL 批量数据操作中常见的问题。
领取专属 10元无门槛券
手把手带您无忧上云