sql学习--update
两种修改形式
第一种:静态插入
update #famousjaycess set jc='johnny cash',occupation='Singer/songwriter',becamefamous=1955,notes='began career selling ...balabala'
where jc='johnny ca'
第二种:
--注意别名和on后边的表连接不要写错
update f set jc='johnny cash',occupation='Singer/songwriter',becamefamous=1955,notes='began career selling ...balabala'
from #famousjaycess f
join #samefamousjaycess s on (f.becamefamous=s.becamefamous)
Halloween的问题
在修改过程中,将被修改行在将被修改的行的列表中移动,会引起多次被修改,这种情况被称为Halloween问题。
好在在问题发生时sql会认识到这个问题,以及那种类型的错误,然后采取措施。
将主关键字和触发器结合起来,看上去好像会增加问题的可能性,毕竟触发器认为数据时被修改的;而实际情况是sqlserver的触发器每个语句只会执行一次,而不是每行都被触发一次
并且触发器只在数据修改之前或之后进行存取,并不是在过程中进行存取。看上去仿佛并没有什么用,但其实并不是。触发器的代码并不会和触发他们的insert、delete、update命令一起编译
执行计划。而是独立的编译并放入缓冲区,所以无论触发它的命令是什么,都可以有效的重复使用。DML语句的执行计划分支给它激发的所有触发器,这种操作在执行计划结束之前进行的。如果
是结束后就无法完成了。
注意这种情况并不适用于约束。每个表的约束都是直接加入DML的执行计划中。
Update和Case
通过Update使用CASE表达式,可以对表进行比较复杂的操作,但需要一定的编程逻辑。
update titles
set price=price*case title when 'business' then 1.5
when 'mod_cook' then .8
when 'trad_cook' then .6
when 'paycholoy' then .5
when 'popular_comp' then 1.8
else .75
end
用Update做检测约束
如果使用Bulk Insert或者其他大批量的加载数据的工具来对有insert触发器的表进行追加数据,那么会发现触发器是能被触发。而且,即使Bulk Insert不妨碍约束,也会是操作变得非常慢。
如果在载入时忽略约束,那么就快多了。有一个选项可以在载入数据之后人工的检查约束和触发器。这就要求对于每一个约束和触发器都有单独的代码,并且做大量的防止出错的操作。
另外一种方式就是在数据载入后立刻执行一个假的update操作。这个假的修改只是简单的将列值置为其本身的值。这样就会触发触发器并对约束进行检查。如果其中包含错误的行那么就会update失败。
create table famousjaycess(
jc varchar(15) check(left(jc,3)<>'joe'),
occupation varchar(25),
becamefamous int default 0,
notes text null
) bulk insert famousjaycess from 'D:\DB\famousjaycess.bcp' update famousjaycess set
jc=jc,
occupation=occupation,
becamefamous=becamefamous,
notes=notes
限制受update影响的行的数目
用select top n的语句可以限制受影响行的数目。select语句作为导出表嵌入在update的from子句中,并与目标表进行连接
update a
set a.contract=0 from authors a
join(select top 5 au_id from authors order by au_id) u
on a.au_id=u.au_id
sql学习--update的更多相关文章
- SQL学习(时间,存储过程,触发器)
SQL学习 几个操作时间的函数 --datapart 获取时间中的年月日时分秒等部分 select DATEPART(year,current_timestamp); select DATEPART( ...
- SQL Server UPDATE语句的用法详解
SQL Server UPDATE语句用于更新数据,下面就为您详细介绍SQL Server UPDATE语句语法方面的知识,希望可以让您对SQL Server UPDATE语句有更多的了解. 现实应用 ...
- mysql下sql语句 update 字段=字段+字符串
mysql下sql语句 update 字段=字段+字符串 mysql下sql语句令某字段值等于原值加上一个字符串 update 表明 SET 字段= 'feifei' || 字段; (postgr ...
- Oracle\MS SQL Server Update多表关联更新
原文:Oracle\MS SQL Server Update多表关联更新 一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新.而表的更新操作中,在很多情况下需要在表达式中引用要更新的表 ...
- ORALCE PL/SQL学习笔记
ORALCE PL/SQL学习笔记 详情见自己电脑的备份数据资料
- Delphi X10.2 + FireDAC 使用 SQL 语句 UPDATE
MainForm.Conn.StartTransaction; UserManagerQuery.SQL.Clear; UserManagerQuery.SQL.Text := 'UPDATE tab ...
- TERADATA SQL学习随笔<一>
此博客内容简介及目录 http://www.cnblogs.com/weibaar/p/6644261.html 最近在TERADATA环境学习SQL.在这里记录一下学习中查过的知识点,作为备案. 目 ...
- SQL学习笔记一之初识数据库
阅读目录 一 数据库管理软件的由来 二 数据库概述 三 mysql介绍 四 下载安装 五 mysql软件基本管理 六 初识sql语句 一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是 ...
- SQL SERVER Update from 使用陷阱
原文:SQL SERVER Update from 使用陷阱 update A set from A left join B on 此方法常用来使用根据一个表更新另一个表的数据,来进行数据同步更新.若 ...
随机推荐
- 【XSY3413】Lambda - 造计算机初步——邱奇-图灵论题与lambda演算
题意: 关于邱奇-图灵论题的一点思考 这道题起源于计算机科学史上一个非常著名的问题——邱奇-图灵论题,这个论题是可计算性理论的基石,关于它的思考与证明几乎贯穿了整个计算机科学史,涵盖了数学.算法理论. ...
- [C#] 序列化实现对象的深拷贝
//对象深拷贝 public static T Copy<T>(T oldObject) where T : class,new() { T newOrder = new T(); Mem ...
- Vector 和 Array 区别
1:array 定义的时候必须定义数组的元素个数;而vector 不需要:且只能包含整型字面值常量,枚举常量或者用常量表达式初始化的整型const对象, 非const变量以及需要到运行阶段才知道其值的 ...
- springMVC+springJDBC+Msql注解模式
最近基于Spring4.X以上的版本写了一个springMVC+springJDBC+Msql注解模式的一个项目,之中也遇到过很多问题 ,为了防止以后遇到同样问题现记录一下知识点以及详细配置. 首先我 ...
- Leetcode 42.接雨水
接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下 ...
- 详解Cookie、LocalStorage、SessionStorage
不管是笔试还是面试相信大家都会经常遇到问Cookie.LocalStorage.SessionStorage 这三个不同的,什么不说先上一波图先: 针对他们大小之分应用场景也有不同: 因为考虑到每个 ...
- Oracle Auto Increment Column - Sequence as Default Value
Solution 1: Prior to Oracle 11g, sequence assignment to a number variable could be done through ...
- IBM CEO罗睿兰:科技公司屹立百年的3个秘诀
假设有不论什么科技公司能够完美阐释"转型"这个词的含义,那么这家公司非创立103年的IBM莫属. 如今,它的变化更胜以往. 在<財富>杂志周二于美国加利福尼亚州拉古纳尼 ...
- hdu 1010 Tempter of the Bone (奇偶性剪枝)
题意:有一副二维地图'S'为起点,'D'为终点,'.'是可以行走的,'X'是不能行走的.问能否只走T步从S走到D? 题解:最容易想到的就是DFS暴力搜索,,但是会超时...=_=... 所以,,要有其 ...
- Android studio 报错 gradel project sync failed Error:Cause: peer not authenticated
在网上找了半天,应该是找不到gradel的路径,试了网上非常多方法.本人解决例如以下: 在android studio中设置gradle.打开File-> settings->Gradle ...