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 此方法常用来使用根据一个表更新另一个表的数据,来进行数据同步更新.若 ...
随机推荐
- models中,对于(Small)IntegerField类型字段的choices参数在前端的展示
# models.py class UserInfo(models.Model): gender_choices = ( (1, "男"), (2, "女"), ...
- 4.几个「不难但却很有用」的 Git 技能点
阅读 Git 原理详解及实用指南 记录 tag:不可移动的 branch tag 是一个和 branch 非常相似的概念,它和 branch 最大的区别是:tag 不能移动.所以在很多团队中,tag ...
- 手写DAO框架(二)-开发前的最后准备
-------前篇:手写DAO框架(一)-从“1”开始 --------- 前言:前篇主要介绍了写此框架的动机,把主要功能点大致介绍了一下.此篇文章主要介绍开发前最后的一些准备.主要包括一些基础知识点 ...
- 【[Offer收割]编程练习赛12 A】歌德巴赫猜想
[题目链接]:http://hihocoder.com/problemset/problem/1493 [题意] [题解] 枚举P从2..n/2 如果P是质数且N-P也是质数; 则输出P和N-P就好; ...
- ansible使用jinja2管理配置文件以及jinja2语法简介
一.Jinja2介绍 Jinja2是基于python的模板引擎,功能比较类似于PHP的smarty,J2ee的Freemarker和velocity.它能完全支持unicode,并具有集成的沙箱执行环 ...
- F - True Liars 带权并查集
After having drifted about in a small boat for a couple of days, Akira Crusoe Maeda was finally cast ...
- <script>标签的加载解析执行
转自原文 <script>标签的加载解析执行 看了很多网上的文章,都是大同小异.总结一下.内部原理还没有搞清楚,有机会再学习. 一.<script>标签的加载解析执行顺序 ht ...
- SQL Server 2012内部原理及故障排除(专栏)
PROFESSIONAL SQL SERVER® 2012 INTERNALS AND TROUBLESHOOTING一书(可从这里下载).认为内容非常不错.自己也想对SQL Server 2012有 ...
- 利用keepalive和timeout来推断死连接
问题是这样出现的. 操作:client正在向服务端请求数据的时候,突然拔掉client的网线. 现象:client死等.服务端socket一直存在. 在网上搜索后,须要设置KEEPALIVE属性. 于 ...
- apache ant解压zip。支持多级文件夹解压
package cn.liuc.util; import java.io.File; import java.io.FileOutputStream; import java.io.IOExcepti ...