【问题标题】:Insert data into a table with primary key(by skipping the duplicate row)将数据插入带有主键的表中(通过跳过重复的行)
【发布时间】:2016-05-18 13:39:12
【问题描述】:

我有一个带有主键的表。当我运行 Insert 语句时,它会给出一个错误,它会在其中找到重复的行并停止插入。我想通过跳过重复的行将数据插入表中。谁能建议我如何做到这一点。

谢谢

【问题讨论】:

  • Insert from query 仅返回源数据中不同的行。有点INSERT ... SELECT DISTINCT ...
  • 看看这个question

标签: sql primary-key sql-insert


【解决方案1】:

您尚未标记您使用的引擎,所以我不知道这是否适合您。

MERGE 语句将 INSERT/UPDATE/DELETE 组合成一个工作单元。

【讨论】:

  • 我使用的是 sql server 2008
【解决方案2】:

您的表主键列必须是 AUTO_INCREMENT,这样您就不必自己插入该值,它会自动插入。

这也是您的最佳实践。因为每次你必须插入唯一值,所以数据库会代你处理。

【讨论】:

  • 主键列是我们将要插入的事务 ID 列。我们希望该列成为主键,这样任何重复的事务 ID 都不会插入到表中。所以我不能为这个专栏真正拥有一个 AUTO_INCREMENT。请建议我这样做的任何其他方式。
  • 查找插入表中的最后一个最大数字并将其递增 1,然后在表中添加/插入数据,但这里您在数据库中有两个调用。 1] 获取最大数 2] 在数据库中插入数据(id 将是最大数 + 1)
【解决方案3】:

如果您使用 MySQL 数据库,那么您的主键列必须是 AUTO_INCREMENT 类型,并且 MySQL 会自动为 PK 插入新值。如果您使用 ORACLE,则必须使用 SEQUENCE 作为不同的方法,这将增加并为您提供新的 PK 值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    相关资源
    最近更新 更多