DB_HIT_SQL SERVER

Speech 08 SQL语言完整性和安全性

约束

Trigger(O, P, A, R)

安全性

在这里插入图片描述

关于exist的4个讨论

not exists的运用:

  • 选出一个不存在,或一个存在;
  • 判断包含于(与except配合)

Note: exists 仅仅表示存在一个元组使其满足.它不适用于判断所有分组都满足(比如所有人的年龄都等于18)

For example
已知:
Student(S#, Sname, Ssex, Sage, D#, Sclass)
Course(C#, Cname, Chour, Credit, T#)
SC(S#, C#, Sgrade)
Teacher(T#, Tname, D#, Salary)

  1. 学过“李明”老师讲授课程的所有学生 . …1.1
    等价于 不存在对于"李明"老师讲授的所有课程都没有学过 …1.2
    1.2不能用not exists写出来,因为它对任意的去做判断
Select *
From Student S
Where exists(select * From Course C, SC, Teacher T 
    			where(S.S# = SC.S# and C.C# = SC.C# and C.T# = T.T#
    					and T.Tname = '李明'))
  1. 找出学全了李明老师讲授所有课程的同学
    法一:等价于 不存在 有一门’李明’老师讲授的课程有同学没有学过
select * 
From Student S
where not exists(select * From Course C, Teacher T			//不存在
					WHERE(T.Tname = '李明' and C.T# = T.T#	//有一门'李明'老师教授的课程
							and not exists(select * From SC	//有学生没学过
											where(SC.C# = C.C# and SC.S# = S.S#))))

…\…\法二:A 属于B <==> not exists ( A except B)
A:'李明’教授的课 属于 B:学生学过’李明’老师讲授的课

select *
From Student S		/* A:'李明'教授的课 属于 B:学生学过'李明'老师讲授的课  equal to 不存在 属于A,但是不属于B*/
where not exists(Select C.C# From Course C, Teacher T				
					WHERE(T.Tname = '李明' and C.T# = T.T#	)/* A:'李明'教授的课 */
							Except (select C.C# From SC, Course C, Teacher T	
										where(C.T# = T.T# and T.Tname = '李明' and S.S# = SC.S# and SC.C# = C.C#	)));
  1. 找出没学过李明老师讲授课程的同学
    等价于 不存在 有一门’李明’老师讲授的课程有同学学过
select *
From Student S
where not exists(Select * From Course C, Teacher T			/* 不存在 */
					WHERE(T.Tname = '李明' and C.T# = T.T#	/* 有一门'李明'老师教授的课程 */
							and exists(select * From SC		/* 有同学学过 */
										where(SC.C# = C.C# and SC.S# = S.S#))));
  1. 找出没学全李明老师讲授课程的学生
    …法一: 等价于 存在 一门李明老师讲授的课程有学生都没学过
select *
From Student S
where exists(Select * From Course C, Teacher T				/* 存在 */
					WHERE(T.Tname = '李明' and C.T# = T.T#	/* 有一门'李明'老师教授的课程 */
							and not exists(select * From SC	/* 同学没学过 */
										where(SC.C# = C.C# and SC.S# = S.S#))));

…\…\法二:利用学生所学的课程 对称差 李明老师所教的课程 不为空 ==>没学全

select *
From Student S
where exists( (Select C.C# From SC, Course C, Teacher T					/* 对称差不等于空 */
					WHERE(S.S# = SC.S# and SC.C# = C.C#			/* 学生所学'李明'教授的课记录 */
							and T.Tname = '李明' and C.T# = T.T#	)
							Except (select C.C# From Course C, Teacher T	/* '李明'老师教授的所有课 */
										where(C.T# = T.T# and T.Tname = '李明')))
				Union (select C.C# From Course C, Teacher T	
										where(C.T# = T.T# and T.Tname = '李明')
							Except Select C.C# From SC, Course C, Teacher T					
									WHERE(S.S# = SC.S# and SC.C# = C.C#			
											and T.Tname = '李明' and C.T# = T.T#	)));

p.s.4.的法二改编于另一名同学的MOOC评论

嵌入式语言交互过程中错误捕获的作用域

exec sql wheneve …只表示从当前到往后同一条exec sql whenever 之间,并不随着语句的控制流(如goto)跳到另外的地方.作用域仅仅在这两条语句之间.

exec sql whenever condition action		   -+
i1:											|
i2: goto end								|	作用域范围
i3:											|
...											|
exec sql whenever	condition action	   -+
in:
in+1:
end:
	in+2:
	in+3:

事务transaction
简称ACID

  • Atomicity原子性:对于事务里所有操作,要么全部都做,要么全部都不做
  • Consistency一致性:保持事务的状态是正确的
  • Isonation隔离性:数据库中的事务 T1,T2;就算T1,T2是并发的,但他们的效果仍是一个先做,另一个后做
  • Durabiliy:DB已提交的事务的影响是永久的,被撤销的事务的影响是可以恢复的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值