`
tsinglongwu
  • 浏览: 232804 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

捕获删除包含外键的数据异常(转载)

 
阅读更多

 

所谓字典就是数据库应用中被其他表(通常加以外键约束)引用的表,如客户表引用客户类型,那么客户类型即为字典表。删除字典数据要考虑是否已被其他数据引用,一般不允许做级联删除。

这个问题想必大家都碰到过,但各有各的 做法。本人与若干同事讨论过,将各种做法总结一下。

  1. 物理删除,即用delete SQL删除。如果字典数据被引用,则会抛出违反外键约束的异常,将其封装为可读的信息提示给用户。JDBC中的异常类为SQLException,如何判断是违反外键约束的异常呢?有方法如下:
    • 利用SQLException中的errorCode,这是数据库特有的错误编码。
    • 利用SQLException中的SQLState,在JAVA API DOC中说明这个是SQL99或XOPEN 标准的编码,而且可以用connection的meta data来判断符合哪个标准。经过的试验,说明这个meta data不太好用,但是SQLState还是较为统一的。
        mysql5.0.21 sqlserver2000 oracle10 postgresql8
      ANSI99 SQLState标准的违反外键约束编码为:23000 23000 23000 23000 23503(可能要在BatchUpdateException的nextException中才能取得)
      Connection的meta data中的getSQLStateType(),符合SQL99标准应该为2 2 2 0 2
  2. 逻辑删除。即置表中的一个标记字段为已删除。查询时不可见,但实际还保留在表中。 好处是不用处理数据被引用的情况。它的缺点是,如果数据没有被引用,那么它其实可以被物理删除,但确留在系统中成为垃圾数据;其次在数据有唯一编码的情况下,被逻辑删除的数据实际上还占用着一个编码,有时用户会疑惑,明明表中查不到这个编码,我在新增的数据中使用这个编码却总提示编码已存在。

   转自:  http://blog.csdn.net/superbible_cs/article/details/1154315

 

分享到:
评论

相关推荐

    在标准的三层架构中用GridViwe显示数据库外键的数据

    本文将详细介绍如何在ASP.NET环境中,利用三层架构和GridView控件来显示包含外键的数据。 首先,我们要理解什么是三层架构。三层架构包括: 1. **数据访问层(DAL,Data Access Layer)**:这是最底层,主要负责与...

    数据完整性、主键和外键、数据类型

    如果一个表的外键指向另一个表的主键,则在删除或更新主表中的主键值时,需要考虑对从表的影响,以避免出现孤立的数据行。 - **域完整性**:域完整性指的是限制列的有效值范围,如定义列的数据类型、长度等,以保证...

    数据主键和外键的错误总结

    - **解决方法**:确保外键包含完整的主键字段组合,以保持数据的一致性。 7. **缺乏外键指标**:外键通常需要有一个索引,以支持高效的查询。如果缺乏外键索引,可能会影响查询性能。 - **解决方法**:为所有的...

    MySQL外键的定义、作用、添加和删除

    MySQL 外键的定义、作用、添加和删除 外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有主键约束或者唯一性约束。外键用来建立和加强两个表数据之间的连接。例如,在学生档案和成绩单两张表中,如果...

    MySQL中利用外键实现级联删除、更新

    * 外键绑定关系这里使用了“ON DELETE CASCADE”和“ON UPDATE CASCADE”,意思是如果外键对应数据被删除或者更新时,将关联数据完全删除或者相应地更新。 MySQL 中的外键可以强制实施数据的一致性和完整性,使得...

    Mysql增加外键的方法

    在实际操作中,建立外键时还需要考虑其他一些因素,例如更新或删除某条记录时,是否需要级联删除或更新其他表中引用了此记录的数据,以及是否允许将引用的字段置为NULL或者设置默认值等等。正确使用外键不仅可以维护...

    自动删除所有表,有外键约束的表优先删除

    标题"自动删除所有表,有外键约束的表优先删除"涉及到的是一个数据库操作的场景,通常需要谨慎处理,因为错误的操作可能导致数据丢失或破坏数据库结构。在这个问题中,我们关注的是如何在有外键约束的环境中安全地...

    如何处理数据库中的外键

    9. **异常处理**:在编程中,需要捕获和处理外键约束失败的异常,以确保程序的健壮性。 10. **数据库设计范式**:外键是符合第三范式(3NF)和更高范式(如BCNF)的数据库设计的一部分,有助于减少数据冗余和提高...

    MySQL删除表的时候忽略外键约束的简单实现

    外键约束是关系数据库中确保数据完整性和一致性的重要机制,它不允许在父表(引用其他表的字段的表)中删除那些已被子表引用的行。然而,有时候在开发或测试环境中,我们可能需要快速地删除所有表并重建数据库结构,...

    mysql 删除外键.png

    其中,`表名`是包含外键的表,`外键名`是你要删除的外键的名称。 5. **重新启用外键检查**:在完成删除操作后,可以使用`SET FOREIGN_KEY_CHECKS = 1;`恢复外键检查。 6. **博文链接**:提供的博客链接...

    mysql外键的添加与删除参考.pdf

    MySQL 外键的添加与删除参考 MySQL 外键是关系数据库管理系统中的一种约束机制,它能够确保数据的一致性和完整性。外键是指在一个表中字段的值必须存在于另一个表中的字段值中。MySQL 中的外键只能在 InnoDB 存储...

    外键关联整理脚本

    `ddl.sql`文件是Grails在生成数据库表结构时产生的,它包含了创建数据库表的SQL语句,这些语句中就包括了定义外键的部分。外键关联的整理,通常是为了理解数据库的结构,优化查询性能,或者在数据库迁移、升级时确保...

    数据库删除所有外键脚本.sql

    Mysql数据库如何删除某一个数据库的所有外键并不删除相应的索引,一个sql脚本解决,无需知道外键的名称。

    java获取数据库主外键

    对于数据库来说,元数据包括数据库名、表名、列名、列类型、约束(如主键、外键)等信息。通过JDBC API可以方便地获取这些元数据。 #### 三、编写代码 接下来,我们将分步骤介绍如何编写Java代码来获取MySQL数据库...

    mysql外键的设置方法

    外键的定义通常包括以下几个步骤: - **创建表并指定主键**:首先需要确定哪个表作为主表,并在该表中定义主键。 - **创建子表并指定外键**:接着创建与主表关联的子表,并在子表中定义外键,指明参照的主表的主键...

    Access中如何建立外键关系

    在数据库设计中,外键(Foreign Key)是一种关键机制,用于在两个表之间建立关联,确保数据的一致性和完整性。在Microsoft Access中,通过外键关系可以实现表之间的链接,使得一个表的数据能够引用另一个表的数据。...

    710504555868560实验三数据导入脚本(包括外键).sql

    710504555868560实验三数据导入脚本(包括外键).sql

    mysql的外键

    - 引用表(父表)是包含被引用主键的表,而被引用表(子表)则是包含外键的表。 - 主键与外键之间的关系可以是一对一、一对多或多对一。 2. **创建外键** 创建外键时,需要确保以下几个条件: - 外键列的数据...

    sql2000获得表结构包括外键

    根据提供的文件信息,我们可以深入探讨如何使用SQL查询来获取SQL Server 2000中某个特定表的结构信息,包括其列定义、数据类型、是否允许空值、默认值、是否为主键或外键等详细属性。这在进行数据库迁移、备份恢复、...

Global site tag (gtag.js) - Google Analytics