sql学习总结(9)——事务处理和优化查询技术

9.1事务的设置与提交

较低的隔离级别可以增加并发,但会出现脏数据,降低数据的正确性。较高的隔离级别可以保证数据的正确性,但会降低并发,即影响程序的运行速度,并且易死锁。

SQL Server支持4种隔离级别:未提交读(read uncommitted)相当于NOLOCK、提交读(read committed)默认选项值、可重复读(repeadable read)、可串行读(serializable)。

设置事务隔离级别

set transaction isolation level

repeatable read

开始事务

begin transaction

事务执行代码

select * from 职工 where 职工号 in

(select 职工号 from 订购单 where 金额>15000)

and 仓库号 in (select 仓库号 from 仓库 where 城市!=’青岛’)

and 工资>1500

提交事务 commit transaction

9.2回滚事务

语法格式:

rollback{tran | transaction}

[transaction_name | @tran_name_variable | savepint_name | @savepoint_variable]

begin transaction update_data

update 职工 set 姓名=’事务修改’ where 职工号=’zg2’

rollback transaction update_data

9.3保存事务

语法格式:

save{tran | transaction} {savepoint | @savepoint_variable}

注意:当事务开始后,事务期间处理期间使用的资源将一直保留,直到事务完成(也就是锁定)。当将事务的一部分回滚到保存点时,将继续保留资源直到事务完成(或者回滚整个事务)

9.4事务中锁的应用

共享锁(S):select

排它锁(X):insert、delete、update,排它锁就不能有共享锁。

死锁:不可避免。

1.当两个事务同时锁定了两个单独的对象,这时每一个事务都要求在另外一个事务锁定的对象上获得一个锁,因此每一个事务都必须等待另一个事务释放占有的锁。

2.当一个数据库中,有若干个长时间运行的事务执行并发操作。

9.5优化查询

1.在大部分情况下,where条件语句中包含or、not,SQL将不使用索引;可以用in代替or,用比较运算符!=代替not。

2.在没有必要显示不重复运行时,不使用distinct关键字,避免增加处理时间。

3.当使用and运算符查找某个范围内的数据时,一般不使用索引,可以用between代替。

时间: 2024-10-12 11:51:19

sql学习总结(9)——事务处理和优化查询技术的相关文章

SQL学习(二)之四大查询语句以及标准写法

SQL四大查询语句——增删改查 增-INSERT INSERT INTO 表 (字段列表) VALUES(值列表) INSERT INTO `user_table` (`ID`, `username`, `password`) VALUES(0, 'blue2', '987654'); // 给0是因为我们之前设置了自动增加,而0不是一个合法的id值,所以就会自动给我们添 删-DELETE DELETE FROM 表 删除表 DELETE FROM `user_table` 注意:没有办法只删除

SQL学习系列(一)之多表查询

在数据库中,各个表之间存在一定的联系,如果需要对数据进行一系列的查询是,仅仅从一个表或一个库中获得数据信息是不够的,需要从多个表或多个数据库提取所需要的数据信息,而进行一些简单select语句查询是无法满足用户需求的,这时就需要涉及到高级查询. 以下都用A.B代表数据库表. 1.内连接查询-内连接使用比较运算符对各个表中的数据进行比较操作,并列出各个表中与条件相匹配的所有数据行. 关键字:INNER JOIN或JOIN (1).等值连接 语句格式:select a * ,b * from A a

sql学习总结(2)——数据库表技术

2.1创建数据库表 use db_databaseck create table 职工 ( 职工编号       int   identity(1,1)   primary   key, 职工号           varchar(50)     unique, 仓库号           varchar(50), 基本工资       int   check(基本工资>=800 and基本工资<=2100), 加班工资       int, 奖金              int, 扣率  

SQL Server 2008从基础开始学习历程(1)------创建表与查询

[by:yy] 无论我们学什么呢,都要讲究一个Why,一个How.那么我们为什么要学SQL呢?无非就那么几点. 1.为了适应其他技术,和其他技术配对而学. 我个人的理解呢,只要在IT行业,无论你学什么,或者做什么工作.都离不开数据库.而学习数据库呢,又太文字化了,看的心里就烦.我是很抵触文字的.看着一大排一大排的字,就怕.可能是大天朝的教育所致.已经怕了学生生涯了. 2.为了适应社会而学. 随便找个招聘信息,都会有标注需要会SQL语言啊.了解MySql呀.会搞Oracle呀.所以呢,为了能在找工

sql学习笔记(15)-----------MySQL 索引与优化总结

索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点. 考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录.如果没有索引,查询将对整个表进行扫描,最坏的情况下,如果所有数据页都不在内存,需要读取10^4个页面,如果这10^4个页面在磁盘上随机分布,需要进行10^4次I/O,假设磁盘每次I/O时间为10ms(忽略数据传输时间),则总共需要100s(但实际上要好很多很多).如果对之建立B-Tree索引,则只需要进行log100(10^6

SQL学习_查询重复数据和连接多个表数据的方法

进行数据库测试时需要根据不同场景查询数据,以便验证发现的问题是否为脏数据引起的.记录一下最近常用的查询方法: 1. 查询表中重复数据(id不同,多个字段值相同) select P1.* from project as P1, project as P2 where P1.id<>P2.id and P1.ProjectId=P2.ProjectId and P1.ServiceTypeId=P2.ServiceTypeId and P1.Rank=P2.Rank 2.连接多个表数据 selec

sql学习笔记(20)----------MySQL 索引优化全攻略

所谓索引就是为特定的mysql字段进行一些特定的算法排序,比如二叉树的算法和哈希算法,哈希算法是通过建立特征值,然后根据特征值来快速查找.而用的最多,并且是mysql默认的就是二叉树算法 BTREE,通过BTREE算法建立索引的字段,比如扫描20行就能得到未使用BTREE前扫描了2^20行的结果,具体的实现方式后续本博客会出一个算法专题里面会有具体的分析讨论; Explain优化查询检测 EXPLAIN可以帮助开发人员分析SQL问题,explain显示了mysql如何使用索引来处理select语

Sql server2005 优化查询速度50个方法小结

Sql server2005 优化查询速度50个方法小结 Sql server2005优化查询速度51法查询速度慢的原因很多,常见如下几种,大家可以参考下. I/O吞吐量小,形成了瓶颈效应.  没有创建计算列导致查询不优化.  内存不足.  网络速度慢.  查询出的数据量过大(可以采用多次查询,其他的方法降低数据量).  锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷).  sp_lock,sp_who,活动的用户查看,原因是读写竞争资源.  返回了不必要的行和列.  查询语句不好,没有

Sql学习笔记4——嵌套子查询(上)

嵌套子查询 子查询是嵌套在另一个查询中的select-from-where表达式.子查询嵌套在where子句中时,通常用于对集合的成员资格.集合的比较以及集合的基数进行检查. 1.集合成员资格 SQL允许测试元组在关系中的成员资格.连接词in测试元组是否是集合中的成员,集合是由select子句产生的一组值构成的.连接词not in测试元组是否不是集合中的成员. 考虑“找出在2009年秋季和2010年春季学期同时开课的所有课程.”按之前所学知识,可以通过对两个集合进行并运算来书写该查询.如下: (