Sqlserver 增删改查----删
--我们就以院系,班级,学生来举例。
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 增删改查----删的更多相关文章
- 【基础篇】js对本地文件增删改查--删
前置条件: 1. 本地有安装node,点击传送门 项目目录: 1. msg.json内容 { "data": [ { "id": 1, "name&q ...
- JavaWeb程序利用Servlet的对SQLserver增删改查操作
声明:学了几天终于将增删改查的操作掌握了,也发现了一些问题,所以总结一下. 重点:操作数据库主要用的是SQL语句跟其他无关. 一:前提知识:PreparedStatement PreperedStat ...
- easyui+nodejs+sqlserver增删改查实现
用到的模块或者技术: Express: http://www.expressjs.com.cn/4x/api.html#express Easyui: http://www.jeasyui.com/d ...
- Sqlserver 增删改查----增
注意我说的常见查询,可不是简单到一个表得增删改查,做过实际开发得人都知道,在实际开发中,真正牵扯到一个表得增删改查只能说占很小得一部分,大多都是好几个表的关联操作的. 下面我就说一下我在实际开发中经常 ...
- Sqlserver 增删改查----改
--我们就以院系,班级,学生来举例. create TABLE [dbo].YuanXi ( Id ,) NOT NULL,--学校id 自增量 YuanXiName varchar() null, ...
- Ajax增删改查-----------删 改
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【基础篇】js对本地文件增删改查
[基础篇] js对本地文件增删改查--增 js对本地文件增删改查--删 js对本地文件增删改查--改 js对本地文件增删改查--查
- 【基础篇】js对本地文件增删改查--查
前置条件: 1. 本地有安装node,点击传送门 项目目录: 1. msg.json内容 { "data": [ { "id": 1, "name&q ...
- 【基础篇】js对本地文件增删改查--改
前置条件: 1. 本地有安装node,点击传送门 项目目录: 1. msg.json内容 { "data": [ { "id": 1, "name&q ...
随机推荐
- Redis官方Tutorial
基本命令 包括SET , GET , INCR , DEL , EXPIRE , TTL SET server:name "10" GET server:name IN ...
- 拷贝Maven工程依赖的jar包出来
参考:https://blog.csdn.net/fengsheng5210/article/details/80491731
- 请求http协议分析- (mysql-thinkphp) (5)
http协议 https://tools.ietf.org/pdf/rfc7231.pdf https://www.w3.org/Protocols/ ======================== ...
- jmeter抓取cnode网站token值
前置条件:已经登录 1.线程组下面先添加HTTP信息头管理器 1.1 jmeter向服务器发送http请求时,需要验证 cookie的等设置信息给到服务器去识别,因此,在发送请求前,我们一般会把相关需 ...
- (转)如何判断VPS是基于哪种虚拟技术?Xen、OpenVZ、Xen HVM、KVM还是VMware
对于VPS新手来说,怕被无良的奸商给忽悠,下的Xen的却给的OpenVZ的,如何来判断自己买的VPS是那种虚拟技术的,下面VPS侦探整理一些常见的方法. 1.通过系统上的相关目录或文件判断 执行:ls ...
- gem5-gpu 全系统FS模式 系统调用SE模式
SE模式中无线程调度器,只能运行单线程程序,如SPEC CPU 2006,仅模拟片上CPU.GPU.Network和DRAM等. FS模式需加载虚拟Linux和磁盘,Linux负责线程调度.实现了Pt ...
- Codeforces Round #618 (Div. 2) 小号上紫之路
这一场涨了不少,题也比较偏思维,正好适合我 A. Non-zero 我们记录这些数字的总和sum,并且记录0的个数zero,显然答案应该是这些0的个数,注意如果sum+zero==0的话答案要额外加一 ...
- 洛谷 P3205 [HNOI2010]合唱队(区间dp)
传送门 解题思路 观察队形的组成方式可以得出,最后一名加入区间i...j的人要么是在i位置上,要么是在j位置上,所以我们可以用dp[i][j][0]表示区间i...j最后一个加入的人站在i位置上的方案 ...
- UVALive - 7752 Free Figurines
题意:有n个娃娃,如果大娃娃j直接套小娃娃i,则fa[i] = j.若fa[i] = 0,则该娃娃自由.给出每个娃娃初始的父亲,和改变后的父亲,在满足以下合法操作的条件下,问最少需要多少次变换. 1. ...
- 七十六、SAP中数据库的查询用法之 COUNT(总数),SUM(求和),AVG(求平均),GROUP BY(分组)
一.我们来查看一个sbook的数据库 二.查看这个表的内容如下 三.表数据如下 四.代码如下 五.结果如下 *&---------------------------------------- ...