我有一个带有列-ID,Property,Property_Value的SQL
Server表RealEstate。该表大约有5到1千万行,并且将来还会增加。我只想在此表中不存在Id,Property,Property_Value的组合时插入行。
示例表-
1,Rooms,5
1,Bath,2
1,Address,New York
2,Rooms,2
2,Bath,1
2,Address,Miami
2,Address,Miami
不允许插入。但是,2,Price,2billion
还可以。我很好奇,知道这样做的“最佳”方法和 原因
。为什么这部分对我来说最重要。两种检查方法是-
有没有一种方案会比另一方案更好的方案?
谢谢。
PS: 我知道已经有一个类似的问题,但是它不能解决我的问题-
唯一约束与预检查 另外,我认为UNIQUE适用于所有数据库,因此我不认为应该删除mysql和oracle标签。
我认为在大多数情况下,两者之间的差异会很小,因此选择主要应通过选择最终对于第一次看代码的人来说最容易理解的实现来驱动。
但是,我认为异常处理有一些 小 优点:
异常处理避免了潜在的竞争状况。如果另一个过程在您的支票和插入内容之间插入了一条记录,则“检查然后插入”方法可能会失败。因此,即使您正在执行“先检查后插入”操作,您仍然希望对插入进行异常处理,并且如果您已经在进行异常处理,那么您也可以取消初始检查。
如果您的代码不是存储过程,并且必须通过网络与数据库进行交互(即应用程序和数据库不在同一个盒子上),那么您要避免进行两个单独的网络调用(一个用于检查,另一个用于数据库调用)。其他)(通过插入操作),并通过异常处理来实现,这提供了一种通过单个网络调用处理整个事件的简单方法。现在,有很多方法可以执行“检查然后插入”方法,同时又避免了第二次网络调用,但是仅捕获异常可能是解决该问题的最简单方法。
另一方面,异常处理需要一个唯一的约束(实际上是一个唯一的索引),这需要进行性能折衷:
我还要注意,如果您实际要执行的操作是“更新其他插入”(即,如果具有唯一值的记录已经存在,则您想更新该记录,否则插入一个新的记录)记录),那么您实际要使用的是特定数据库的UPSERT方法(如果有)。对于SQL
Server和Oracle,这将是MERGE语句。
SQL UNIQUE 约束 UNIQUE 约束唯一标识数据库表中的每条记录。 UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。 PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。 请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。 CREATE TABLE 时的 SQL UNIQUE 约束 下面的 SQL
问题内容: 我有一张表,像 该对(FieldID,FormID)应该是唯一的,但只有在不删除该行(isDeleted = 0)的情况下,才可以。 是否可以在SQLServer 2008中定义这样的约束?(不使用触发器) PS设置(FieldID,FormID,isDeleted)是唯一的,增加了将一行标记为已删除的可能性,但是我希望有机会将n行(每个FieldID,FormID)设置为isDele
问题内容: 我收到以下错误。请你帮助我好吗? 消息547,级别16,状态0,第1行 INSERT语句与FOREIGN KEY约束“ FK_Sup_Item_Sup_Item_Cat”发生冲突。在数据库“ dev_bo”的表“ dbo.Sup_Item_Cat”中发生了冲突。该语句已终止。 代码: 最后一列是导致该错误的原因。我试图将已经存在的值放入对应于sup_item的列中。 问题答案: 在您的
主要内容:选取设置检查约束的字段,在创建表时设置检查约束,在修改表时添加检查约束,删除检查约束MySQL检查约束(CHECK)是用来检查数据表中字段值有效性的一种手段,可以通过 CREATE TABLE 或 ALTER TABLE 语句实现。设置检查约束时要根据实际情况进行设置,这样能够减少无效数据的输入。 在《MySQL默认值》和《MySQL非空约束》中讲解的默认值约束和非空约束也可看作是特殊的检查约束。 选取设置检查约束的字段 检查约束使用 CHECK 关键字,具体的语法格式如下: C
主要内容:Oracle Check约束简介在本教程中,您将学习如何使用Oracle检查约束来强制域(列)的完整性。 Oracle Check约束简介 Oracle检查约束允许通过限制一列或多列所接受的值来强制执行域完整性。 要创建一个检查约束,可以定义一个返回或的逻辑表达式。 Oracle使用此表达式来验证正在插入或更新的数据。 如果表达式的计算结果为,则Oracle接受数据并进行插入或更新。 否则,Oracle将拒绝这些数据,新数据根本
问题内容: 什么是防止在创建约束约束之前检查约束的最佳机制?实体的修改? 假设“用户”实体具有“ loginid”作为唯一约束,明智的做法是在创建或修改之前检查是否已存在具有该loginid名称的用户条目。 要么 您是否要让数据库抛出ConstraintViolationException并在UI层中适当地处理此消息。在jboss接缝框架中应在哪里执行此类检查。 注意:目前,没有对seam-gen