在没有主键或唯一约束的数据库中插入或更新一行

💡 原文英文,约600词,阅读约需3分钟。
📝

内容提要

在我7年的编程中,我主要用ORM与SQL交互。Laravel的Eloquent ORM有个实用的updateOrInsert()方法,但WordPress中没有类似功能,因为post_name不是主键也没有唯一约束。为解决这个问题,我用两个SQL语句:先更新已有行,再在没有匹配行时插入新行。这方法适合一次性迁移,不需要存储过程或应用逻辑。

🎯

关键要点

  • 作者在7年的编程生涯中主要使用ORM与SQL交互。
  • Laravel的Eloquent ORM有一个实用的updateOrInsert()方法。
  • WordPress中没有类似的功能,因为post_name不是主键也没有唯一约束。
  • 在迁移WordPress页面数据时,需要更新已存在的页面而不是重复创建。
  • 如果post_name是主键,可以使用REPLACE语句实现类似功能。
  • 如果post_name有唯一约束,可以使用INSERT ... ON DUPLICATE KEY UPDATE语句。
  • 作者选择用两个SQL语句来解决问题:先更新已有行,再插入新行。
  • 使用INSERT ... SELECT语句可以在不存在匹配行时插入新行。
  • 这种方法适合一次性迁移,不需要存储过程或应用逻辑。
➡️

继续阅读