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 ...
随机推荐
- GetHub上很实用的几个Demo
手机号匹配的正则表达式:https://github.com/VincentSit/ChinaMobilePhoneNumberRegex/blob/master/README-CN.md FEBS- ...
- 连接数据库 - (mysql-thinkphp) (2)
1.现在conf里面写好选择的数据库 选择好了以后 2.在index里面输入 查询mysql数据库里面的表tables_priv的所有数据 public function index() { $res ...
- win7 & win10 安装AD管理工具
总所周知,AD域的作用对于一个公司有着无比重要的作用,但是在Win7/10系统下该如何去管理AD域呢. 对于AD域的服务器搭建,在这里我们不进行说明,感兴趣的同学可以去Google相关的资料,现在主要 ...
- R语言 scale()函数
1.scale() 函数 #Usage scale(x, center = TRUE, scale = TRUE) #center中心化,scale标准化 #Arguments x :a numeri ...
- python基础数据类型--元组(tuple)
python基础数据类型--元组(tuple) 一.元组的定义和特性 定义:与列表相似,只不过就是将[ ] 改成 ( ) 特性:1.可以存放多个值 2.不可变 3.按照从左到右的顺序定义元组元素,下标 ...
- 剑指offer自学系列(五)
题目描述:请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...
- QObject的timerEvent使用
其实在QT里,我们自己写的类一般通常需要继承QObject类,因为这一类里规定好的拿来即可用的方法. 比如信号,槽,以及前一个博文写的movetothread方法,这里就是介绍一个QObject的ti ...
- read和write函数的使用
https://blog.csdn.net/qq_33883085/article/details/88667003
- Hibernate--起步
1.配置对象 配置对象是你在任何 Hibernate 应用程序中创造的第一个 Hibernate 对象,并且经常只在应用程序初始化期间创造.它代表了 Hibernate 所需一个配置或属性文件.配置对 ...
- TensorFlow2 Part1:基础
TensorFlow™是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现,其前身是谷歌的神经网络 ...