什么是级联更新什么是级联删除?dbeaver如何进行级联删除和修改

2026-04-24 12:30:01 :0

什么是级联更新什么是级联删除?dbeaver如何进行级联删除和修改

这篇文章给大家聊聊关于级联删除,以及什么是级联更新什么是级联删除对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

本文目录

什么是级联更新什么是级联删除

级联更新就是好比学生表中的的张三选了一门叫做高数的课程,在选课表中就有张三和高数共同组成的一条选课记录,如果级联更新,当学生表中的张三改名为张四,他的选课表中的张三也会自动改为张四
级联删除,例如员工表中一项数据是部门ID,部门ID是部门表的主键,如果是级联删除,当删除了部门A的时候,会把所有属于部门A的员工都给删除。

dbeaver如何进行级联删除和修改

从表可以被直接删除或修改。主表如果被从表引用,不能直接删除或修改主表的主键。
在修改和删除主表的主键时,同时修改或删除从表的外键值,称为级联操作ON UPDATE CASCADE-- 级联修改,主键发生修改时,外键也会修改ON DELETE CASCADE _ 级联删除,主键发生删除时,外键也会删除
》DBeaver 是一个基于 Java 开发,免费开源的通用数据库管理和开发工具,使用非常友好的 ASL 协议。可以通过官方网站或者 Github 进行下载。由于 DBeaver 基于 Java 开发,可以运行在各种操作系统上,包括:Windows、Linux、macOS 等。DBeaver 采用 Eclipse 框架开发,支持插件扩展,并且提供了许多数据库管理工具:ER 图、数据导入/导出、数据库比较、模拟数据生成等。

级联删除

级联删除(cascade delete)隶属于约束条件(constraint),因此,级联删除需要在约束条件中设置。
在 FOREIGN KEY 中加入 ON DELETE CASCADE 可以实现级联删除,但是在执行 SQL 语句时,SQL Server 返回结果为仅有一行数据受到影响,而实际在本例中有三行数据( STUDENT 中一行, ENROLLMENT 中两行)受到影响,所以级联删除不会通知操作者其他表中是否有数据受到影响。

hibernate级联删除

  有两张表 结构如下

  Java代码

  t_item                           t_bid

  id        int                     id        int

  name    varchar                   name      varchar

  item_id   int

  其中表t_item的主键id是表t_bid的item_id字段的外键 那么在这种情况下 如果删除表t_item中的记录 并且该记录中的id主键被t_bid中的item_id字段所引用 就会抛出如下异常

  Java代码

  ERROR ( ): Cannot delete or update a parent row: a foreign key constraint fails (`test/t_bid` CONSTRAINT `fk_id` FOREIGN KEY (`id`) REFERENCES `t_item

  ` (`id`))

  解决方法 级联删除 即在删除t_item表中的记录时同时删除t_bid表中的相关记录

  ( ) 增加外键约束时声明级联删除 即

  Java代码

  alter table t_bid add constraint fk_id foreign key(id) references

  key(id) on delete cascade

  ( ) 使用触发器 在删除t_item表中记录之前先删除与之相关的t_bid表中的记录

  触发器代码(MySQL)

  Java代码

  delimiter //

  create trigger tri_delete before delete on t_item

  for each row

  begin

  delete from t_bid where id = old id;

  end //

  Hibernate中的解决方案

  这个问题在Hibernate中相对容易解决 只需设置cascade = delete 即可 此时观察发出的sql语句

  Java代码

  Hibernate: select item _ id as id _ _ item _ name as name _ _ from t_item item _ where item _ id=?

  Hibernate: select em_id as item _ _ bids _ id as id _ bids _ id as id _ _ bids _ price as price _ _ em_id as item _ _ _ from t_bid bids _ where em_id=?

  Hibernate: update t_bid set item_id=null where item_id=?

  Hibernate: delete from t_bid where id=?

  Hibernate: delete from t_bid where id=?

  Hibernate: delete from t_item where id=?

  发现在删除t_bid表中记录之前会先将它的item_id字段值设置为null 但如果我们在映射文件中设置item_id字段不能为null 即设置Bid hbm xml文件为 Java代码

  《many to one name= item column= item_id class= po Item not null= true /》

  注意不能在Item hbm xml文件中进行如下设置(即在key元素中指定not null= true )

  Java代码

  《set name= bids cascade= all 》

  《key column= item_id not null= true /》

  《one to many class= po Bid /》

  《/set》

  这样会抛出 Repeated column in mapping for entity 异常

  如果我们指定item_id字段值不能为null 那么在删除时会抛出如下异常

  Java代码

   hibernate exception GenericJDBCException: Could not execute JDBC batch update···

  Caused by: java sql BatchUpdateException: Data truncation: Column set to default value; NULL supplied to NOT NULL column item_id at row

  ???

  此时的解决方法是设置inverse= true 这在Hibernate文档中有相应的描述 Java代码

  Very Important Note: If the 《key》 column of a 《one to many》 association is declared NOT NULL Hibernate may cause constraint violations when it creates or updates the association To prevent this problem you must use a bidirectional association with the many valued end (the set or bag) marked as inverse= true

  观察此时发出的sql语句

  Java代码

  Hibernate: select item _ id as id _ _ item _ name as name _ _ from t_item item _ where item _ id=?

  Hibernate: select em_id as item _ _ bids _ id as id _ bids _ id as id _ _ bids _ amount as amount _ _ em_id as item _ _ _ from t_bid bids _ where em_id=?

  Hibernate: delete from t_bid where id=?

  Hibernate: delete from t_bid where id=?

  Hibernate: delete from t_item where id=?

  没有发出update语句 关于inverse= true 的理解

  save update: 级联保存(load以后如果子对象发生了更新 也会级联更新) 但它不会级联删除

  delete: 级联删除 但不具备级联保存和更新

  all delete orphan: 在解除父子关系时 自动删除不属于父对象的子对象 也支持级联删除和级联保存更新

  all: 级联删除 级联更新 但解除父子关系时不会自动删除子对象

  delete orphan:删除所有和当前对象解除关联关系的对象

  注意 以上设在哪一段就是指对哪一端的操作而言 比如delete 如果设在one的一端的《set》属性里 就是当one被删除的时候 自动删除所有的子记录

  如果设在many一端的《many to one》标签里 就是在删除many一端的数据时 会试图删除one一端的数据 如果仍然有many外键引用one 就会报 存在子记录 的错误 如果在one的一端同时也设置了cascade= delete 属性 就会发生很危险的情况 删除many一端的一条记录 会试图级联删除对应的one端记录 因为one也设置了级联删除many 所以其他所有与one关联的many都会被删掉

  所以 千万谨慎在many一端设置cascade= delete 属性

  故此cascade一般用在《one to one》和《one to many》中

  one to many中设置级联删除 比如:

  《set

  name= entryvalues

  lazy= false

  inverse= true

  order by= VALUEID

  cascade= all delete orphan

  》

  《key》

  《column name= CONTEXTENTRYID /》

  《/key》

  《one to many

  class= Entryvalue

  /》

  《/set》

  如果用Hiberante的SchemaExport导出表到数据库 是不会在数据库中设置外键的cascade属性的 查看ENTRYVALUE表 其中的外键CONTEXTENTRYID的on delete属性是no action

  但是使用Hiberante管理事务 它是会维护这种级联关系的 比如这样操作:

  public void testCascadeDelete() {

  Session s = HibernateUtil getSession();

  Transaction tx;

  try {

  tx = s beginTransaction();

  Contextentry ce = (Contextentry)s load(Contextentry class new Long( ));

  s delete(ce);

  mit();

  } catch (HibernateException e) {

  // TODO Auto generated catch block

  e printStackTrace();

  }

  }

  则引用此Contextentry的Entryvalue是会被正确级联删除的

  如果使用普通JDBC操作 比如:

  public void testCascadeDeleteSQL() {

  Session s = HibernateUtil getSession();

  Transaction tx;

  String sql = delete contextentry where id= ;

  try {

  tx = s beginTransaction();

  Connection con = nnection();

  Statement st = con createStatement();

  st execute(sql);

  mit();

  } catch (HibernateException e) {

  // TODO Auto generated catch block

  e printStackTrace();

  } catch (SQLException e) {

  // TODO Auto generated catch block

  e printStackTrace();

  }

  }

  则会报 存在子记录 的错误 这里的Transaction实际上是无效的 因为用的是JDBC的Connection和Statement 已经脱离了Hibernate的管理 如果手动将ENTRYVALUE表的相关外键ON DELETE属性设为CASCADE 则上面的操作当然正确执行——级联删除子记录

  all delete-orphan 的能力

   当保存或更新父方对象时 级联保存或更新所有关联的子方对象 相当于 cascade 为 save update

   当删除父方对象时 级联删除所有关联的子方对象 相当于 cascade 为 delete

   删除不再和父方对象关联的所有子方对象 当然 不再和父方对象关联的所有子方对象 必须是在本次事务中发生的

  解除父子关系的 java 语句例如

  public void testCascadeDelete() {

  Session s = HibernateUtil getSession();

  Transaction tx;

  try {

  tx = s beginTransaction();

  Contextentry ce = (Contextentry)s load(Contextentry class new Long( ));

  Entryvalue ev = (Entryvalue)s load(Entryvalue class new Long( ));

  ev setContextentry(null);

  s delete(ce);

  mit();

  } catch (HibernateException e) {

  // TODO Auto generated catch block

  e printStackTrace();

  }

  }

  如果 cascade 属性取默认值 null 当解除父子关系时 会执行如下 sql

  update ENTRYVALUE set CONTEXTENTRYID=null where ID=

lishixinzhi/Article/program/Java/ky/201311/28140

关于级联删除和什么是级联更新什么是级联删除的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

什么是级联更新什么是级联删除?dbeaver如何进行级联删除和修改

本文编辑:admin

更多文章:


easyui调用bartendee模板(EXCEL数据库调用BarTender10.1问题)

easyui调用bartendee模板(EXCEL数据库调用BarTender10.1问题)

大家好,easyui调用bartendee模板相信很多的网友都不是很明白,包括EXCEL数据库调用BarTender10.1问题也是一样,不过没有关系,接下来就来为大家分享关于easyui调用bartendee模板和EXCEL数据库调用Ba

2026年7月18日 14:45

matlab sym(大家好!matlab中syms是什么意思)

matlab sym(大家好!matlab中syms是什么意思)

大家好,今天小编来为大家解答以下的问题,关于matlab sym,大家好!matlab中syms是什么意思这个很多人还不知道,现在让我们一起来看看吧!本文目录大家好!matlab中syms是什么意思matlab中syms什么意思MATLAB

2026年3月27日 04:15

technology各种词性(technique与technology的区别)

technology各种词性(technique与technology的区别)

“technology各种词性”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看technology各种词性(technique与technology的区别)!本文目录technique与technology的区别工艺的近义词

2026年3月28日 22:00

facilitate英语怎么读(促成的英语翻译 促成用英语怎么说)

facilitate英语怎么读(促成的英语翻译 促成用英语怎么说)

各位老铁们,大家好,今天由我来为大家分享facilitate英语怎么读,以及促成的英语翻译 促成用英语怎么说的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年2月28日 23:30

vue2diff算法(简单几句话,知道什么是回流重绘、vue虚拟dom、diff算法和key)

vue2diff算法(简单几句话,知道什么是回流重绘、vue虚拟dom、diff算法和key)

大家好,vue2diff算法相信很多的网友都不是很明白,包括简单几句话,知道什么是回流重绘、vue虚拟dom、diff算法和key也是一样,不过没有关系,接下来就来为大家分享关于vue2diff算法和简单几句话,知道什么是回流重绘、vue虚

2026年2月26日 10:15

金山表单移除填写入口什么意思(金山表单提交成功能删除吗)

金山表单移除填写入口什么意思(金山表单提交成功能删除吗)

各位老铁们好,相信很多人对金山表单移除填写入口什么意思都不是特别的了解,因此呢,今天就来为大家分享下关于金山表单移除填写入口什么意思以及金山表单提交成功能删除吗的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录金山

2025年9月16日 09:00

column在sql是什么意思(sql语句中的information_schema.COLUMNS 是什么意思呢)

column在sql是什么意思(sql语句中的information_schema.COLUMNS 是什么意思呢)

各位老铁们好,相信很多人对column在sql是什么意思都不是特别的了解,因此呢,今天就来为大家分享下关于column在sql是什么意思以及sql语句中的information_schema.COLUMNS 是什么意思呢的问题知识,还望可以

2026年8月17日 16:15

powerpoint模板(如何制作PowerPoint的模板)

powerpoint模板(如何制作PowerPoint的模板)

今天给各位分享如何制作PowerPoint的模板的知识,其中也会对如何制作PowerPoint的模板进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录如何制作PowerPoint的模板PPT演示文稿设计模板的默认

2025年7月6日 00:15

optimistic怎么读英语(optimistic怎么读)

optimistic怎么读英语(optimistic怎么读)

“optimistic怎么读英语”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看optimistic怎么读英语(optimistic怎么读)!本文目录optimistic怎么读optimistic 这个英语单词怎么读opti

2026年3月8日 11:45

snackbar怎么读英语(快餐店的英文单词是什么)

snackbar怎么读英语(快餐店的英文单词是什么)

“snackbar怎么读英语”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看snackbar怎么读英语(快餐店的英文单词是什么)!本文目录快餐店的英文单词是什么mobile怎么读主食用英文怎么说快餐店的英文单词是什么快餐店:

2026年3月14日 02:00

儿童编程课网课哪个好(少儿编程课应该选择哪家)

儿童编程课网课哪个好(少儿编程课应该选择哪家)

大家好,儿童编程课网课哪个好相信很多的网友都不是很明白,包括少儿编程课应该选择哪家也是一样,不过没有关系,接下来就来为大家分享关于儿童编程课网课哪个好和少儿编程课应该选择哪家的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧

2025年7月11日 01:30

html中生成滚动条或文字(html如何实现滚动文字和音乐)

html中生成滚动条或文字(html如何实现滚动文字和音乐)

大家好,html中生成滚动条或文字相信很多的网友都不是很明白,包括html如何实现滚动文字和音乐也是一样,不过没有关系,接下来就来为大家分享关于html中生成滚动条或文字和html如何实现滚动文字和音乐的一些知识点,大家可以关注收藏,免得下

2026年2月25日 20:45

js开发动态星星(使用Canvas绘制星星闪烁的效果)

js开发动态星星(使用Canvas绘制星星闪烁的效果)

本篇文章给大家谈谈js开发动态星星,以及使用Canvas绘制星星闪烁的效果对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录使用Canvas绘制星星闪烁的效果通过JS实现分数对应的星星评分体现QQ空间模块带星星的代码js星星评价

2026年3月27日 23:15

五一ppt网站(51文档如何下载)

五一ppt网站(51文档如何下载)

今天给各位分享51文档如何下载的知识,其中也会对51文档如何下载进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录51文档如何下载五一劳动节活动策划书模板10篇51文档如何下载1登陆填写个人信息2来到主界面的话,

2026年3月26日 11:15

doughnut(甜甜圈用英语怎么说)

doughnut(甜甜圈用英语怎么说)

大家好,如果您还对doughnut不太了解,没有关系,今天就由本站为大家分享doughnut的知识,包括甜甜圈用英语怎么说的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录甜甜圈用英语怎么说doughnut是什么意思

2026年7月17日 22:15

conventionally a phoneme(conventionally是什么意思)

conventionally a phoneme(conventionally是什么意思)

大家好,关于conventionally a phoneme很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于conventionally是什么意思的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望

2026年2月16日 02:45

css下拉菜单颜色(如何用CSS把下拉菜单背景色弄成透明而上面的文字不透明)

css下拉菜单颜色(如何用CSS把下拉菜单背景色弄成透明而上面的文字不透明)

大家好,css下拉菜单颜色相信很多的网友都不是很明白,包括如何用CSS把下拉菜单背景色弄成透明而上面的文字不透明也是一样,不过没有关系,接下来就来为大家分享关于css下拉菜单颜色和如何用CSS把下拉菜单背景色弄成透明而上面的文字不透明的一些

2025年6月3日 05:45

html5支持的标签(html5 新加的标签元素例如:<header><section><footer>解惑)

html5支持的标签(html5 新加的标签元素例如:<header><section><footer>解惑)

本篇文章给大家谈谈html5支持的标签,以及html5 新加的标签元素例如:解惑对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录html5 新加的标签元素例如:解惑html5中标签和标签有什么区别html5 新加的标签元素例如

2025年11月17日 20:30

dom4j生成xml特殊字符不转义(JAVA dom4j怎样将双引号 写入XML时为“ 表示)

dom4j生成xml特殊字符不转义(JAVA dom4j怎样将双引号 写入XML时为“ 表示)

大家好,关于dom4j生成xml特殊字符不转义很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于JAVA dom4j怎样将双引号 写入XML时为“ 表示的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,

2025年12月14日 22:45

headerstyles设表头样式(word怎么绘制表头斜线并打字)

headerstyles设表头样式(word怎么绘制表头斜线并打字)

大家好,如果您还对headerstyles设表头样式不太了解,没有关系,今天就由本站为大家分享headerstyles设表头样式的知识,包括word怎么绘制表头斜线并打字的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文

2026年8月7日 22:15

近期文章

本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索