逻辑:数据库或应用程序/2(约束检查)

2023-11-24

这是一个特定版本这个问题.
我想检查是否插入了重复的行。我应该在我的应用程序层以编程方式检查它:

if (exists(obj))
{
    throw new DuplicateObjectException();
}
HibernateSessionFactory.getSession().save(obj);

或者我应该捕获数据库层抛出的异常并在违反约束时触发?

try
{
    HibernateSessionFactory.getSession().save(obj);
}
catch(ConstraintViolationException e)
{
    throw new DuplicateObjectException();
}

EDIT:换句话说:虽然约束仍然存在(无论如何,这是很好的数据库设计,而且我不能确定我的应用程序将是唯一访问该表的应用程序),但我是否应该依赖该约束并处理其违规将引发的异常,或者我还是最好检查一下?

EDIT2:当然,我在事务中进行检查+插入,锁定表以确保没有其他进程同时写入另一条记录


首先你must在数据库上有一个主键或唯一约束来正确地强制这种唯一性 - 毫无疑问。

鉴于存在约束,您应该在应用程序中以哪种方式编码?我的偏好是尝试插入并捕获异常。因为大概大多数插入都会成功,只有少数会因为重复而失败(这就是“异常”所暗示的!):当数据库无论如何都要执行自己的约束检查时,在每次插入之前执行存在检查效率很低。

此外,理论上,存在检查无论如何都可能是错误的 - 如果其他人设法在存在检查和插入之间的一小段时间内提交具有相同键值的记录。然后,如果您不捕获数据库异常,您会认为插入成功,但实际上没有成功。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

逻辑:数据库或应用程序/2(约束检查) 的相关文章

  • 如何使用 aerospike 加载器在 aerospike 中加载嵌套的 csv 文件?

    我已将 JSON 文件转换为 CSV 格式 现在使用 aerospike 加载器将 CSV 加载到 Aerospike 中 我可以为简单的结构执行此操作 但如何修改 allDatatype json 的内容以在 Aerospike 中加载嵌
  • 使用 unnest() 返回行?

    我尝试在完成后返回一组行UPDATE 像这样的东西 UPDATE Notis new noti SET notis noti record type FROM SELECT FROM Notis WHERE user id 2 FOR UP
  • 如何设计具有主键和多值属性的表?

    我对数据库设计很感兴趣 现在正在阅读相应的文献 通过这本书 我遇到了一个让我感到不确定的奇怪例子 有一个关系 在此表中 我们有一个复合主键 StudentID Activity 但ActivityFee部分依赖于表的key Activity
  • 不使用 Django 的 Python 数据库(适用于 Heroku)

    令我惊讶的是 我没有发现其他地方提出过这个问题 简而言之 我正在编写一个应用程序 计划部署到云 可能使用 Heroku 它将执行各种网络抓取和数据收集 它将位于云中的原因是 我可以将其设置为每天自行运行 并将数据提取到数据库 而无需我的计算
  • 动态连接字符串数据库C#

    我总是使用这行代码进行连接 string ConnectString datasource mysource username myusername password mypassword database mydatabasename 这
  • 将数据库表转换为 XML 模式文件

    我正在使用 SQL Server 2005 是否有任何命令或 GUI 工具 例如 SQL Server Management Studio 中的任何菜单 功能 可以将数据库表转换为 XML 架构文件 xsd 提前致谢 乔治 我找到了这个 试
  • JPA 乐观锁与同步 Java 方法

    使用 JPA 乐观锁定 我们可以通过 Version 字段控制数据库表是否已被另一个事务同时更新 从而允许在数据库中存储可靠的数据 如果一个Java应用程序只有一个CRUD服务负责数据库中的特定实体 我们也可以同步其方法并管理信息在数据库中
  • mysql 中 INSERT 语句的计算列

    假设我想要一个表来记录其他表中的日期和列数 或者任何类型的数学 字符串连接等 CREATE TABLE log id INTEGER NOT NULL AUTO INCREMENT date DATETIME NOT NULL count
  • 如何从实体框架中的 .edmx 文件生成数据库?

    我不得不突然转而使用 Code First Entity Framework 4 1 一开始我对这个框架一无所知 但在过去的 8 个小时里 我现在对阅读博客和文章感到更加自在 特别是这个博客 http blogs msdn com b ad
  • MySQL解释更新

    作为我大学复习的一部分 我试图回答以下问题 至少在表的一个属性上创建索引 employees 数据库 您可以在其中使用 MySQL EXPLAIN 工具 清楚地显示好处 在条款或检索方面 和负面 在 更新条款 创建相关索引的信息 对于第一部
  • 如何将变量设置为触发器 MYSQL 内存储过程的结果?

    我这里有一个小问题 我正在为我的数据库工作创建一个触发器 但我不知道如何在触发器内使用存储过程 我想将过程的结果保存在变量中 然后使用稍后在 IF 比较器上变量 这是我的代码 DELIMITER CREATE TRIGGER insert
  • 通过文件上传控件上传文件时重命名c#.net中的文件并将文件的更改名称保存在数据库中

    我有文件上传器 通过它浏览文件 并将浏览文件的名称存储在字符串变量中 现在我想用存储在另一个字符串变量中的另一个名称重命名这个uplaod文件名 string strRoleValue ddlrole SelectedValue strin
  • 如何在数据库中找到实际的联系表7结构?

    我想找到我所有表单的实际代码 有很多 例如 cf7 代码如下所示
  • 为什么 sql 字段名称中不应该包含逗号?

    人们一直告诉我列名中不应包含空格 我只是想知道 这是为什么 这是我为学校创建的一些数据库表遇到的问题 字段名称包括 Preble 和 Darke 相反 它们需要是 普雷布尔县 俄亥俄州 和 达克县 俄亥俄州 如果它们是行名称 我只需创建一个
  • WooCommerce:在数据库中查找产品

    我正在使用 WooCommerce 创建一个网站 我想根据用户在主页搜索表单中输入的邮政编码来限制用户可用的产品 为了能够实现这一目标 我必须在 phpMyAdmin 的数据库中指定每个产品的条件 但我似乎找不到它 有谁知道 phpmyAd
  • 是否可以自动化 SQL Server 2008 分析器?

    有一个post https stackoverflow com questions 488020 what is your most useful sql trick to avoid writing more code关于有用的 SQL
  • 即使将“enable_seqscan”设置为关闭后,也未使用数组列上的 GIN 索引?

    根据推荐this https stackoverflow com questions 4058731 can postgresql index array columns comment10357041 4059785评论 我建立了一个 i
  • 如何在数据库中存储年月?

    是否有在数据库中存储年份和月份的标准方法 我需要根据月份和年份制作一些报告 我无法使用日期和函数实时提取月份 因为表很大 所以我需要预处理 我会和 Michael 的建议是什么 https stackoverflow com a 81694
  • Oracle 数据库 12c 尝试连​​接时出错:网络适配器无法建立连接

    我第一次安装Oracle数据库12c 我正确地遵循了所有步骤并将其安装在 Windows 7 64 位上 但是当我单击 SQL Developer 并尝试创建新连接时 我输入了用户名和密码等信息 最后单击 测试 按钮 我得到了这个错误消息
  • 用于读取数据库模式的外部库或迷你语言?

    我正在考虑为我的妻子编写一个简单的数据库应用程序 但我对良好的编程实践很感兴趣 并且希望有一个人类可读的源来存储数据库模式 只是 我不知道有什么工具可以完成这项工作 而且我不敢相信它们不存在 可能我只是不知道该问谷歌什么 但我没有找到它们

随机推荐