曾经因为级联删除的问题浪费了N多时间,顾此在这里写下小小心得,供大家借鉴。
  在数据库分别建立表t_food(菜单)和表t_book(订单),如下所示:
  t_food:
————————————————————————————
  food_id (主键)       food_name          food_price
  1                                        苹果                       2.4
  2                                    香蕉                       3.5
  ……
————————————————————————————
  t_book:
————————————————————————————
  id                  foodid(外键)                  num
  1                      1                                          5
  2                      2                              4
  ……
————————————————————————————
  如果你想删除t_food中的某一行数据,就有可能会出现如下错误:
java.sql.SQLException: Cannot delete or update a parent row: a foreign key constraint fails (`shopcar2`.`t_book`, CONSTRAINT `b_fid_o_fid` FOREIGN KEY (`foodid`) REFERENCES `t_food` (`food_id`))
 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2921)
 at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1570)
 at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
 at com.mysql.jdbc.Connection.execSQL(Connection.java:2972)
 at com.mysql.jdbc.Connection.execSQL(Connection.java:2902)
 at com.mysql.jdbc.Statement.executeUpdate(Statement.java:929)
 at org.apache.jsp.MyJsp_jsp._jspService(MyJsp_jsp.java:91)
 at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
 at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389)
 at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:319)
 at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:270)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:191)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:227)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:211)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:817)
 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:623)
 at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:444)
 at java.lang.Thread.run(Thread.java:619)
  为什么会出现这样的问题呢?那是因为你所删除的数据表t_food中包含了主键food_id,如果直接删除数据,那么,
food_id对应的外键foodid就没有被指向,自然就会出现这种错误。
  那么,如何解决这个问题呢?有两种方法:
  第一种,也是最直接的,那就是在删除t_food的数据行之前,先将其所对应的t_book中的数据行删除。如你想删除
t_food中food_id=1所对应的数据行,那么,你可以先删除t_book中foodid=1对应的数据行,然后再删除t_food中
food_id=1所对应的数据行。
  第二种,在建立数据库时,设置主外键on delete cascade。这样,在删除主键对应数据时,外键对应的数据也会
被删除。
  此外,还有级联修改,它跟级联删除一样会出现以上问题,解决方法相似。建立数据库时,设置主外键on
update  cascade。

关于级联删除和级联修改相关推荐

  1. [NHibernate]一对多关系(级联删除,级联添加)

    目录 写在前面 文档与系列文章 一对多关系 一个例子 级联删除 级联保存 总结 写在前面 在前面的文章中,我们只使用了一个Customer类进行举例,而在客户.订单.产品中它们的关系,咱们并没有涉及, ...

  2. oracle 允许级联删除,oracle系列--级联删除和级联更新

    鉴于此前收藏的精彩博客无料被删除了,很是痛心,所以还是要复制一下 一.级联删除 Oracle在外键的删除上有NO ACTION(类似RESTRICT).CASCADE和SET NULL三种行为. 下面 ...

  3. Oracle数据库中的级联查询、级联删除、级联更新操作教程

    这里整理了Oracle中的三种级联操作,其中Oracle定义外健的时候可以定义级联删除,但是没有级联修改的语法,当然可以用触发器实现,下面我们详细来看Oracle数据库中的级联查询.级联删除.级联更新 ...

  4. SQL级联删除与级联更新使用格式

    --SQL级联删除与级联更新使用格式: CREATE TABLE 主键表(ID INT PRIMARY KEY,Name VARCHAR(20)) CREATE TABLE 外键表(ID INT RE ...

  5. 数据库级联操作mysql_Oracle数据库中的级联查询、级联删除、级联更新操作教程...

    级联查询在ORACLE 数据库中有一种方法可以实现级联查询 select * //要查询的字段 from table //具有子接点ID与父接点ID的表 start with selfid=id // ...

  6. MySQL之级联删除、级联更新、级联置空

    1. 准备测试表 # 专业表majorcreate table major(id int primary key auto_increment, mmane varchar(20))engine=in ...

  7. java 级联删除_JPA级联删除

    本篇文章帮大家学习JPA级联删除,包含了JPA级联删除使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 级联移除用于指定如果父实体被移除,则其所有相关实体也将被移除. 以下 ...

  8. java 级联删除_Mybatis 级联删除的实现

    需求描述 今日需求是删除资源时同时删除与该资源绑定的角色数据,有两张表,资源表.角色与资源绑定表,级联删除的时候有两种方法:①建立表时直接建立约束,当父表删除数据时数据库会自动去删除子表中的数据,②通 ...

  9. mysql delete 级联删除_MySQL级联删除和更新

    首先,目前在产品环境可用的MySQL版本(指4.0.x和4.1.x)中,只有InnoDB引擎才允许使用外键,所以,我们的数据表必须使用InnoDB引擎. 下面,我们先创建以下测试用数据库表: CREA ...

最新文章

  1. 十大python开发软件-必看 | 2020年,Python十大应用领域介绍!
  2. java rabbitmq 绑定_RabbitMQ:交换,队列和绑定 - 谁设置了什么?
  3. linux清理swap内容,Linux如何清理swap.buffer及cache等缓存
  4. python第七关再来一盘_7、 Python系列,七,的,集合
  5. linux中常用的shell脚本,Linux常用shell脚本
  6. suse下删除mysql_每日MySQL之005:SUSE linux下卸載MySQL
  7. CSS3 响应式布局实例
  8. 公钥,私钥,数字签名,证书
  9. 利用ADB命令强制卸载oppo自带浏览器
  10. spring boot企业合同管理系统 毕业设计源码161456
  11. iOS苹果开发者账号申请教程
  12. 标准差和标准误的区别
  13. 英文单词之说文解字(9)
  14. 【代码段】动态生成页面heading
  15. 练一练思维缜密程度。有程式xyz+yzz=532,其中x、y、z都是整数,用c++编写一个程序,求x、y、z分别代表什么数字
  16. mongodb不等于某个值_mongodb条件查询不等于
  17. js中break和continue的区别
  18. Ubuntu图形界面下命令行窗口打开快捷键创建
  19. 【BZOJ1004】【HNOI20008】cards
  20. lwip组播实现和原理-STM32F407

热门文章

  1. 模糊搜索怎么实现_干货 | 你真的了解自己是怎么搜索的吗_01
  2. 案例 github_github 项目搜索技巧-让你更高效精准地搜索项目
  3. 串口光猫设备结构及主要特点介绍
  4. 实现打包后修改服务器接口地址,vue打包之后生成一个配置文件修改接口
  5. sqoop hive导出到mysql_Sqoop hive导出到mysql[转]
  6. 【卷积码系列3】(n,k,m)卷积码的维特比译码实现(不使用MATLAB库函数)及性能对比(vitdec函数-代码见CSDN同名资源)
  7. 【OFDM系列3】AWGN下基于循环前缀(CP)OFDM调制解调原理、信噪比计算及仿真(H Harada经典OFDM书籍中代码详解及更正)
  8. 几道题帮你搞定数据选择器
  9. 运行时错误7内存溢出_分别从运行时和GC的角度看JAVA8内存管理
  10. asp listview 单元格文字颜色_如何替换CAD表格中特定区域单元格中的文字?