批量插入数据分割脚本
#!/bin/bash
## source ./xxx.sql
# 脚本用于在每5000条INSERT语句后面添加一个COMMIT语句
# 在第一行插入关闭自动提交,并在最后一条INSERT后面添加COMMIT
# 使用方法: ./add_commit_to_sql.sh input.sql output.sql
# 检查输入参数
if [ "$#" -ne 2 ]; then
echo "使用方法: $0 输入文件.sql 输出文件.sql"
exit 1
fi
# 读取输入输出文件名
INPUT_FILE=$1
OUTPUT_FILE=$2
# 检查输入文件是否存在
if [ ! -f "$INPUT_FILE" ]; then
echo "错误: 文件 '$INPUT_FILE' 不存在。"
exit 1
fi
# 计数器
count=0
# 首先关闭自动提交
echo "SET autocommit=0;" > "$OUTPUT_FILE"
echo "START TRANSACTION;" >> "$OUTPUT_FILE"
# 读取输入文件并处理每一行
while IFS= read -r line
do
# 将读取的行写入输出文件
echo "$line" >> "$OUTPUT_FILE"
# 检查当前行是否为INSERT语句
if [[ "$line" == INSERT* ]]; then
# 增加计数器
((count++))
# 检查计数器是否达到5000
if [ $count -eq 5000 ]; then
# 写入COMMIT语句
echo "COMMIT;" >> "$OUTPUT_FILE"
# 重置计数器
count=0
# 开启新的事务
echo "START TRANSACTION;" >> "$OUTPUT_FILE"
fi
fi
done < "$INPUT_FILE"
# 检查最后是否还需要一个COMMIT
if [ $count -ne 0 ]; then
echo "COMMIT;" >> "$OUTPUT_FILE"
fi
# 打开自动提交
echo "SET autocommit=1;" >> "$OUTPUT_FILE"
echo "处理完成。"