数据库导入SQL文件时出现“主键冲突”的处理策略

老实说,处理 SQL 导入中的主键冲突有四种主要策略。
选择哪一种取决于具体情况。

扩展一下,我们先说最重要的一点:忽略冲突,使用INSERT IGNORE。
例如,去年我们运行了一个用户导入项目,其中约有 3 ,000 个项目。
我们直接用这个脚本5 分钟就完成了,但是后来发现老用户的邮箱丢失了。
说实话,当时非常尴尬。
还有一点是,要更新冲突的数据,必须使用ON DUPLICATE KEY UPDATE。
请记住将其用于金融系统。
在同步去年的订单数据时,我们改变了更新逻辑,避免价格变为0。
还有其他重要的细节。
预处理 SQL 文件是一项技术任务。
我们用Python去重的时候,花了两天时间写了脚本,但是导出的时候并没有发现外键冲突。
很多人没有注意到这一点。
最后,临时表方法最稳定,但需要的步骤较多。
例如,在导入营销活动时,我们使用LEFT JOIN过滤掉重复的优惠券,但临时表占用了几G的空间。

一开始以为临时表最慢,后来发现节省了CPU缓存。
事实上,启动并运行它比一项一项更新要快得多。

提醒:使用ON DUPLICATE KEY UPDATE时,不要强行改变ID字段,否则会引起连锁反应改变整个表。

sqlserver数据库怎么导入.sql文件

SQLite数据库导入SQL文件的方法和注意事项

说白了:SQLite有两种导入SQL文件的方法:命令行和编程。

中线方法是sqlite3 命令高亮定向符号<。
例如,sqlite3 your_database.db < data>此方法速度快,但没有错误处理。

该程序使用Python的sqlite3 模块。
代码是conn=sqlite3 .connect('your_database.db'),然后cursor=conn.cursor(),然后打开SQL文件读取数据,cursor.executescript(sql_script),最后是conn.commit()和conn.close()。
这种方法比较灵活,适合多种情况。
文档不断被转录,最好是utf-8 交易管理很重要。
开始添加 添加;我推荐; SQL 文件中的右行。
Conn.execute(“START ACTION”)也可以通过编程方式进行控制。

SQLite 语法与标准 SQL 不同。
例如:AUTOINCRMENT 不是 AUTO_INCRMENT。
导入前检查兼容性,或以编程方式更改语法。

错误处理:正确的命令直接报告错误,程序可以尝试,除了捕获异常。
对于权限问题,需要保证可以读写文件,尤其是在服务器的服务器上。

建议使用编程方式进行大规模导入和批量导入,将大文件拆分成较小的文件。
对于并发控制,使用 sqlite3 .connect(...,isolation_level='PRIVILEGE') 关闭数据库。
WAL模式还可以提高性能。

导入前对数据进行恐怖处理,导入后验证数据完整性。

对于简单场景使用命令行,对于复杂或大文件使用编程。
关键是编码集成、事务优化、语法兼容性、错误捕获和许可证检查。
高级优化要考虑收敛、开发反馈和备份。

你自己看看。