月亮代表我的心

个人博客,跟月亮无关,跟代表无关,无关谁的心

Sql Server 复习笔记(2)

事务的特性(ACID)

原子性:完全成功,完全失败
一致性:保证事务中数据的一致
隔离性:事务之间不可见,只能看到事务之前或之后的结果
持久性:事务后的结果必须持久保存

事务的分类

显式事务
BEGIN TRANSACTION:开始事务
COMMIT TRANSACTION:提交事务
ROLLBACK TRANSACTION savepoint:回滚事务
SAVE TRANSACTION:在事务内设置保存点,实现部分提交

隐性事务
SET IMPLICIT_TRANSACTIONS ON
SET IMPLICIT_TRANSACTIONS OFF
无须描述事务的开始,只需提交或回滚每个事务

自动提交事务
所有 Transact-SQL 语句在完成时,都会提交或回滚。
默认模式

锁是在多用户环境中对数据访问的限制
使用锁定来确保事务的完整性和数据库的一致性

解除死锁(解除之后马上回滚,不会等待)
SET DEADLOCK_PRIORITY NORMAL | LOW
SET LOCK_TIMEOUT 3000(毫秒)

事务的隔离

未提交读:可以读取为提交的事务,而该事务可能会在以后回滚,这是最底的隔离级别,它只能确保不读取发生物理损坏的数据.

提交读:默认级别,可以确保不读取发生物理损坏的数据,不读取未提交数据,但它不能确保这些数据在事务结束之前不被修改.

可重复读:使用中的所有数据都会被锁定,其它事务不能更新这些数据.(可能可以插入)

可串行读:最严格的隔离级别,可以阻止其他用户更新数据集,或向数据集中插入行,直到该事务完成.

SET TRANSACTION ISOLATION LEVEL READ COMMITTED
| READ UNCOMMITTED
| REPEATABLE READ
| SERIALIZABLE

高级查询

合并多个表中数据的方法有三种:
1.联合:合并多个数据表的行
2.联接:合并多个数据表的列
3.子查询:将一个查询包含到另一个查询中

子查询的类型

嵌套子查询

1
2
SELECT orderid, customerid FROM orders AS or1
WHERE 20 < (SELECT quantity FROM [ORDER details] AS od WHERE or1.orderid = od.orderid AND od.productid = 23)

相关子查询

1
SELECT au_lname, au_fname FROM authors WHERE 100 IN (SELECT royaltyper FROM titleauthor WHERE titleauthor.au_ID = authors.au_id)

子查询中使用运算符/关键字
IN
与子查询的结果比较,与结果之一相同为TRUE,(如OR) 子查询可以返回多行

NOT IN
不在子查询的结果中出现为TRUE,子查询可以返回多行

比较运算符
子查询只能返回一行,否则出错

ALL / ANY / SOME
在比较运算符后加ALL / ANY / SOME, 子查询可以返回多行
>ALL : 大于子查询的最大值
>ANY:大于子查询的最小值
=ANY: 于IN 相同
SOME
是 SQL-92 标准的 ANY 的等效物

EXISTS 和 NOT EXISTS
检查子查询返回的行是否存在

联合union
将两个或更多个 select 语句的结果合并为一个结果集。

select 语句
union [ALL]–ALL 子句表示不删除重复的行
select 语句

每个select语句的列类型相同和数目相同,字段名称可以不同,ORDER BY子句要放在最后

COMPUTE 子句

详细信息行和分组汇总行显示在同一个结果集中
select type, price, advance FROM titles
ORDER BY type
COMPUTE SUM(price), SUM(advance) BY type

详细信息行和分组汇总行及总汇总行显示在同一个结果集中
select type, price, advance FROM titles
ORDER BY type
COMPUTE SUM(price), SUM(advance) BY type
COMPUTE SUM(price), SUM(advance)

DISTINCT
从select语句的结果集中删除重复的行,如果不指定,则返回包括重复的行

select INTO
按照查询返回的数据集创建一张新表

EXISTS
指定一个子查询,检测行的存在。 如果子查询包含行,则返回 TRUE。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注