要批量执行这些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. 注意事项

  1. 事务大小:批量执行时,确保事务大小在数据库承受范围内,避免内存溢出。
  2. 主键冲突:确保id字段无重复值,否则会导致插入失败。
  3. 权限:确保用户有执行批量插入的权限。
  4. 日志记录:大事务可能导致日志膨胀,可考虑分批执行(如每1000条提交一次)。

选择建议

  • 快速测试:使用数据库客户端工具直接执行SQL文件。
  • 生产环境:通过代码执行,便于错误处理和性能优化。
  • 性能优先:使用多行INSERT语句或数据库特定的批量插入API(如PostgreSQL的COPY命令)。