要批量执行这些SQL插入语句,可根据使用的数据库管理系统(DBMS)选择不同的方法。以下是几种常见的批量执行方式:
1. 使用数据库客户端工具
MySQL / MariaDB
- 命令行:将所有SQL语句保存到文件(如
cities.sql),然后执行:
mysql -u username -p database_name < cities.sql- MySQL Workbench:粘贴所有语句到查询窗口,点击执行按钮。
PostgreSQL
- 命令行:
psql -U username -d database_name -f cities.sql- pgAdmin:在查询工具中执行批量语句。
SQL Server
- SSMS:粘贴所有语句到查询窗口,按
F5执行。
2. 使用编程语言执行批量插入
如果需要通过代码执行,可使用数据库连接库(如Python的pymysql、Java的JDBC等)。以下是Python示例:
import pymysql
# 连接数据库
conn = pymysql.connect(
host='localhost',
user='username',
password='password',
database='database_name'
)
try:
with conn.cursor() as cursor:
# 读取SQL文件内容
with open('cities.sql', 'r') as file:
sql_statements = file.read().split(';')
# 执行每条SQL语句
for statement in sql_statements:
if statement.strip(): # 跳过空语句
cursor.execute(statement)
# 提交事务
conn.commit()
print("批量插入成功!")
except Exception as e:
print(f"错误: {e}")
conn.rollback() # 出错时回滚
finally:
conn.close()3. 优化批量插入性能
合并INSERT语句(推荐)
将多个单行INSERT合并为一个多行INSERT,减少事务开销:
INSERT INTO thorn_dict (id,ORGANIZATION_ID,CATEGORY_ID,CODE,name,STATUS,REMARK) VALUES
(999999980,3,1241,999999980,'北京','E',null),
(999999981,3,1241,999999981,'成都','E',null),
-- 其他城市...
(1000000010,3,1241,1000000010,'重庆','E',null);
COMMIT;禁用自动提交
如果使用编程语言,可先关闭自动提交,执行完所有语句后再手动提交:
conn.autocommit(False) # 禁用自动提交
# 执行多条INSERT
conn.commit() # 一次性提交4. 注意事项
- 事务大小:批量执行时,确保事务大小在数据库承受范围内,避免内存溢出。
- 主键冲突:确保
id字段无重复值,否则会导致插入失败。 - 权限:确保用户有执行批量插入的权限。
- 日志记录:大事务可能导致日志膨胀,可考虑分批执行(如每1000条提交一次)。
选择建议
- 快速测试:使用数据库客户端工具直接执行SQL文件。
- 生产环境:通过代码执行,便于错误处理和性能优化。
- 性能优先:使用多行INSERT语句或数据库特定的批量插入API(如PostgreSQL的
COPY命令)。
















