--我们就以院系,班级,学生来举例。
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. LR、SVM、RF、GBDT、XGBoost和LightGbm比较

    正则化 L1范数 蓝色的是范数的解空间,红色的是损失函数的解空间.L2范数和损失函数的交点处一般在坐标轴上,会使\(\beta=0\),当然并不一定保证交于坐标轴,但是通过实验发现大部分可以得到稀疏解 ...

  2. 第十届蓝桥杯 RSA解密(C++/ java)

    一道不错的题目,借鉴了网上的代码,用了拓展欧几里得算法求逆元,再用快速乘求每次a的余数,再快速幂对余数进行幂运算. #include <bits/stdc++.h> using names ...

  3. vs2010编译C++ 指向指针的指针

    #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _T ...

  4. endnote的使用

    下载网址: https://support.clarivate.com/Endnote/s/article/EndNote-Installer-download?language=en_US 关联of ...

  5. 第2节 网站点击流项目(下):6、访客visit分析

    0: jdbc:hive2://node03:10000> select * from ods_click_stream_visit limit 2;+--------------------- ...

  6. MySQL之表、列别名及各种JOIN连接详解

    MySQL在SQL中,合理的别名可以让SQL更容易以及可读性更高.别名使用as来表示,可以分为表别名和列别名,别名应该是先定义后使用才对,所以首先要了解sql的执行顺序(1) from(2) on(3 ...

  7. torch.nn.Conv2d()使用

    API 输入:[ batch_size, channels, height_1, width_1 ] Conv2d输入参数:[ channels, output, height_2, width_2 ...

  8. oracle进入CDB

    第一步:使用sys登陆 CONN sys/change_on_install AS SYSDBA; 第二步:查看现在的容器名称 SHOW con_name; 第三步:改变容器为PDB ALTER SE ...

  9. Docker-harbor-V1.3.0 ”私有仓库“搭建 Easy

    准备: centos     7.0 Docker version 1.12.6    docker-compose version 1.19.0   1: updata-yum:   更新yum 源 ...

  10. 锤子科技向OpenBSD基金会捐款195 万

    导读 专注于提供 OpenBSD 资讯的网站 OpenBSD Journal 昨日报道了锤子科技成为 OpenBSD 基金会 2019 年首位铱金捐赠者的消息. 根据 OpenBSD Journal ...