--我们就以院系,班级,学生来举例。
create TABLE [dbo].YuanXi
(
Id int IDENTITY(,) NOT NULL,--学校id 自增量
YuanXiName varchar() null, --院系名字 )
create TABLE [dbo].Class
(
Id int IDENTITY(,) NOT NULL,--班级id 自增量
YuanXiID int null,--院系id
ClassName varchar() null --班级名字 )
create TABLE [dbo].Student
(
Id int IDENTITY(,) NOT NULL,--学生id 自增量
ClassID int null,--班级id
StudentName varchar() null,--学生姓名
)
--这个表是图片表,我临时加的,后面可能用这个演示
create TABLE [dbo].PathImg
( Id int IDENTITY(,) NOT NULL,--学校id 自增量
TableName varchar() null, --这个是表明,比如我要在信息工程学院价格图片,那就要在改表中把XuanXi表的表名子加上,还有信息工程学院的id加上
TableNameId int null,--这个就是某一个表中的某一个id
Path varchar() null, --存放班级照片路径的
)

其实删和插入操作差不多。

我们就简单的说常用且简单的删除:

1,删除表中所有数据:

delete from YuanXi where =

2,根据条件删除表中某些数据

delete from YuanXi where YuanXiName=传入的参数

接下来,就是涉及多表数据删除的问题了。注意:在实际开发中在执行删除操作的时候,一定要遵循一个原则,不要留尾巴,也就是在删除某一条数据的时候,一定要把和这条数据所有有牵扯并且不影响其他数据的数据全部删除,如果不这样做,其他表中会留有残余,也就是数据垃圾,不利于后续项目的维护。所以,在执行删除操作的时候,往往你要删除一条数据,大多都会牵扯的几个表的数据删除。

这里我也要说一下,删除的时候也要考虑级别,   就以上面四个表为例:如果我要删除YuanXi表中的信息工程学院,那么我就把和信息工程学院有关的所有数据都要删除,班级表中的信息工程学院的班级,Student表中班级下的所有学生,还有通用图片表格中以上三个表中所有数据图片路径都删除。但是如果我要删除Class表中多媒体,这时,我就不能删除YuanXi表中信息工程学院了,如果我要删除信息工程学院那么,Class表中计算机科学与技术就会变得无用了。这样就会出现数据错误,影响平台的正常显示了。这时你只能删除,学生表中在信息工程学院下的所有学生,和通用图片表中的关于班级图片路径和学生图片路径。

下面我就演示一下删除学院,也是最多表的删除数据的操作了,当然是针对上面四个表来说的:

@YuanXiID:传入的yuanXI表中的Id参数,下面写存储过程要用,所以上面直接写成这个形式了。

--//第一步:
delete from YuanXi where Id=@YuanXiID--先删除院系
delete fom PathImg where TableName='YuanXi' and TableNameID=@YuanXiID --删除通用图片表中图片路径
--//第二步:注意:这里如果你直接删除Class表中的数据,那Student表中的数据就没法删除了,因为与Student表中关联的Class中的Id已经被删除,所以这时候应该这样做
//先删除与班级关联的Sudent表中学生和PathImg图片路径
这里要逆序删除,不然会出现找不到关联表Id的情况了。
先在PathImg表中删除关于学生的图片路径id

delete from PathImg where TableName=’Student' and Id in(select Id from Student where Id in(select Id from Class where YuanXiID=@YuanXiID))

-- /(2)/删除Student表中学生Id
     delete from Student where Id in(select Id from Class where YuanXiID=@YuanXiID)

-- //(3)删除Class表中班级Id
     delete from Class where YuanXiID=@YuanXiID

--//(4)删除PathImg表中班级图片路径Id

delete from PathImg where TableName='Class' and TableNameID in (select Id from Class where YuanXiID=@YuanXiID)

--注意:(1)和(2)必须要在(3)和(4)的前面执行,(1)必须要在(2)前面执行。这样才能把数据删除干净。

整理一下,写个存储过程:(注意删除数据的时候,一般传的参数都是表中的自增id列,这个参数是唯一确定的)

USE [TestData]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO ALTER PROCEDURE [dbo].[deleteYuanXi]
@YuanXiID int --表示YUanXi表中的Id列的参数变量
AS
delete from YuanXi where Id=@YuanXiID--先删除院系
delete from PathImg where TableName='YuanXi' and TableNameID=@YuanXiID --删除通用图片表中图片路径
delete from PathImg where TableName=’Student' and Id in(select Id from Student where Id in(select Id from Class where YuanXiID=@YuanXiID))--删除PathImg表中学生图片路径
delete from Student where Id in(select Id from Class where YuanXiID=@YuanXiID)--删除Student表中学生Id
delete from Class where YuanXiID=@YuanXiID--删除Class表中班级Id
delete from PathImg where TableName='Class' and TableNameID in (select Id from Class where YuanXiID=@YuanXiID)--删除PathImg表中班级图片路径

现在看来,删除操作并不像我们想的那么简单了。

想学好数据库,当然任何事都一样,理论知识固然重要,但是实践更重要,可能对一些人来说,将起理论知识来,头头是道,但是让他操作那就是另一回事了。像我在公司刚接触这些存储过程的时候,一脸懵逼,因为他就像写后台代码一样,好多存储过程都好几百行,看的我都想哭。我也没学什么理论知识,遇到不会的就百度一下,日积月累,我写sql代码也像我写后台代码一样了,只是,知道这样做是对的,但是不知道具体理论,包括数据库的逻辑代码效率优化,也是只知道如何改进执行效率会更高,至于什么原因就一知半解了。真是应了老邓的那句话了  ’实践是检验真理的唯一标准!‘

Sqlserver 增删改查----删的更多相关文章

  1. 【基础篇】js对本地文件增删改查--删

    前置条件: 1. 本地有安装node,点击传送门 项目目录: 1. msg.json内容 { "data": [ { "id": 1, "name&q ...

  2. JavaWeb程序利用Servlet的对SQLserver增删改查操作

    声明:学了几天终于将增删改查的操作掌握了,也发现了一些问题,所以总结一下. 重点:操作数据库主要用的是SQL语句跟其他无关. 一:前提知识:PreparedStatement PreperedStat ...

  3. easyui+nodejs+sqlserver增删改查实现

    用到的模块或者技术: Express: http://www.expressjs.com.cn/4x/api.html#express Easyui: http://www.jeasyui.com/d ...

  4. Sqlserver 增删改查----增

    注意我说的常见查询,可不是简单到一个表得增删改查,做过实际开发得人都知道,在实际开发中,真正牵扯到一个表得增删改查只能说占很小得一部分,大多都是好几个表的关联操作的. 下面我就说一下我在实际开发中经常 ...

  5. Sqlserver 增删改查----改

    --我们就以院系,班级,学生来举例. create TABLE [dbo].YuanXi ( Id ,) NOT NULL,--学校id 自增量 YuanXiName varchar() null, ...

  6. Ajax增删改查-----------删 改

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 【基础篇】js对本地文件增删改查

    [基础篇] js对本地文件增删改查--增 js对本地文件增删改查--删 js对本地文件增删改查--改 js对本地文件增删改查--查

  8. 【基础篇】js对本地文件增删改查--查

    前置条件: 1. 本地有安装node,点击传送门 项目目录: 1. msg.json内容 { "data": [ { "id": 1, "name&q ...

  9. 【基础篇】js对本地文件增删改查--改

    前置条件: 1. 本地有安装node,点击传送门 项目目录: 1. msg.json内容 { "data": [ { "id": 1, "name&q ...

随机推荐

  1. WinCC V7.5安装过程截图

  2. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:自适应大小的按钮组

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. JuJu团队12月28号工作汇报

    JuJu团队12月28号工作汇报 JuJu   Scrum 团队成员 今日工作 剩余任务 困难 飞飞 完成GUI 待安排 无 婷婷 调试代码 提升acc 无 恩升 修正evaluate 修正evalu ...

  4. SChema 多个属性的设置学习

    <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http:/ ...

  5. C++面试常见问题——14内存管理

    内存管理 内存管理由三种方式: 自动存储 静态存储 动态存储 自动存储 对于函数的形参.函数内部变量.和结构体变量等,编译器在函数运行过程中在栈中自动对其分配内存,调用结束后对其进行销毁.变量的声明周 ...

  6. iOS 枚举ENUM和OPTIONS的区别

  7. LOJ #10002. 喷水装置

    题目 裸的贪心. 基本思想见图: Code: #include<iostream> #include<cstdio> #include<cstring> #incl ...

  8. 原型与继承与class

    对象有属性(专业点叫静态属性)和方法(专业点叫静态方法)和原型属性和原型方法 除了系统自带的那么几百万个对象,我们自己写在js的创建的对象,自定义的对象,都来自对象的构造函数,用来构造对象的函数,叫做 ...

  9. Unity Reflection Probe使用入门

    贴官方API的说法: 反射探头: 一个反射探头很像一个相机,捕获了周围所有方向的球形视图.然后将捕获的图像存储为Cubemap,可由具有反射材料的对象使用.在给定场景中可以使用多个反射探测器,可以将对 ...

  10. SpringMVC原理及流程解析

    前言 春节期间宅在家里闲来无事,对SpringMVC进行了比较深入的了解,将之前模糊不清的地方基本摸索清楚了,特此撰文总结记录一下. 正文 一.一个请求为什么会调用到SpringMVC框架里? 首先问 ...