博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL删除失败
阅读量:3931 次
发布时间:2019-05-23

本文共 1212 字,大约阅读时间需要 4 分钟。

SQL因外键影响而删除失败的一个解决办法

前情提要

create table a ( id varchar(8),   primary key(id) ); create table b ( id varchar(8),   name varchar(6),   foreign key(id) references a(id),   primary key(id) ); insert into a values('1202'); insert into a values('2320'); insert into a values('1981'); insert into a values('4390'); insert into b values('1202','alice'); insert into b values('2320','carlos'); insert into b values('1981','dem'); insert into b values('4390','ema');

问题描述

  • 假如现在要删掉a表中的某条信息,因为外键影响,必须把b表中的相关信息删除之后,对a表的删除才能成功,但是我们可能并不想删除b表中的信息,怎么办呢?

解决办法

  • 首先建一个b表的副本
  • 注意:c的字段特点和b的一样,唯一的区别是没有外键
select *into cfrom b;
  • 然后就可以删除a表中你想删除的信息了,即先删除b表中的相关信息,再对a表进行删除

后续操作

  • 之后想对b表增删改查的话,应该操作b表还是它的副本c表呢?

  • 查询c表

  • 往b表中增添数据,并对c表进行更新
insert into c select * from b where not exists( select *                   from c                   where c.id=b.id                     and c.name=b.name                 );--对c表进行更新,即插入b表有而c表没有的数据

  • 删b表:直接删
  • 删c表:需要删除b表中一样的数据,再删c表中的数据。如果不删b表中信息的话,c表再更新,又会把刚删除的数据重新添加进来
  • 例如:
  • 我想删除c表中id=’1202’的数据,必须把b表中id=’1202’的数据也删除,如果不这样的话,下次c表更新的话,id=’1202’的数据又会重新出现

  • 改c表:直接改
  • 改b表:先删除c表中相关的信息,然后改b表中的信息,再更新c表
  • 例如:
  • 我想把b表中id=’1202’的name改为‘lucky’
  • 先删除c表中id=’1202’的数据
  • 然后把b表中id=’1202’的name改为‘lucky’
  • 然后更新c表
  • 这样c表中id=’1202’的name也是’lucky’了

转载地址:http://cqvgn.baihongyu.com/

你可能感兴趣的文章
计算机科学不等于数学
查看>>
文件系统与NoSQL分布式存储技术对比
查看>>
rootkit技术
查看>>
调试寄存器(debug registers, DRx)理论及实践
查看>>
Linux下逻辑地址-线性地址-物理地址图解
查看>>
vim安装SrcExpl 插件,实现自动显示跳转函数及变量定义功能
查看>>
linux 版本中 i386/i686/x86-64/pcc 等... 的区别
查看>>
机器学习 | 台大林轩田机器学习基石课程笔记11 --- Linear Models for Classification
查看>>
机器学习 | 台大林轩田机器学习基石课程笔记12 --- Nonlinear Transformation
查看>>
线性代数 | (2) 矩阵Part Two
查看>>
机器学习 | 台大林轩田机器学习基石课程笔记13 --- Hazard of Overfitting
查看>>
机器学习 | 台大林轩田机器学习基石课程笔记14 --- Regularization
查看>>
机器学习 | 台大林轩田机器学习基石课程笔记15 --- Validation
查看>>
机器学习 | 台大林轩田机器学习基石课程笔记16 --- Three Learning Principles
查看>>
机器学习 | 台大林轩田机器学习技法课程笔记1 --- Linear Support Vector Machine
查看>>
机器学习 | 台大林轩田机器学习技法课程笔记2 --- Dual Support Vector Machine
查看>>
线性代数 | (3) 行列式
查看>>
学术英语 | (1) wordList1
查看>>
机器学习 | 台大林轩田机器学习技法课程笔记3 --- Kernel Support Vector Machine
查看>>
机器学习 | 台大林轩田机器学习技法课程笔记7 --- Blending and Bagging
查看>>