【问题标题】:select and delete a record without the information of primary key [closed]选择并删除没有主键信息的记录[关闭]
【发布时间】:2011-11-03 14:28:46
【问题描述】:

我的要求是先选择一条记录(该记录可能没有主键),然后删除同一条记录。

以下是流程:

  1. 从表中选择所有记录。
  2. while (resultset.next()),获取单条记录。
  3. 删除记录。

代码必须适用于所有数据库。因为这将是通用服务。

这是一个java数据库服务。目前它是为Oracle实现的。我们使用ROWID来识别每条记录。但是对于其他数据库它失败了,因为一些数据库没有ROWID和类似的概念。我想做这个服务通用的。我想应用除 ROWID 以外的一些逻辑

有什么想法吗?

非常感谢。

【问题讨论】:

  • 此代码也必须与 .net 和 java 一起使用?你没有忘记php或c吗?
  • 我的建议:进一步研究 SQL。您可以在单个查询中执行此操作,无需单独选择然后删除。
  • 为什么不直接为有问题的行运行一个删除语句?
  • 这是一项不可能完成的任务。如果没有主键或其他唯一标识符,您将无法正确删除记录。另外,您需要从集合的角度开始思考,您永远不会通过循环遍历表中的所有记录来完成这样的任务。
  • 我认为您永远不会遍历某些内容来删除它,而是创建一个更有意义的删除 SQL 语句,例如:“DELETE FROM Customers c WHERE c.age > 20”。这样你就不需要主键来识别了。

标签: java .net mysql sql-server database


【解决方案1】:

DELETE FROM [TABLE] 和那个表的名字怎么样?或者,如果您想通过某些标准(如列值)删除,为什么不直接将其放入您的语句中,以及使用 WHERE 子句?

有一种用于数据库操作的语言:SQL。在适当的地方使用它。

【讨论】:

  • 或者只是删除表并使用 PK 或 UKC 重新创建它:D
【解决方案2】:

鉴于没有唯一标识符,您打算如何识别这一记录?充其量您必须比较所有其他记录,但这并不能保证唯一性,即使所有字段都符合您的要求,您仍然可能最终删除“错误”记录。

【讨论】:

    【解决方案3】:
    Delete from table
    where somefield = 'somevalue'
    

    【讨论】:

      猜你喜欢
      • 2014-05-24
      • 2023-03-06
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多