大型数据库期末复习

第八章 Transact-SQL 程序结构

批是一组SQL语句的集合,一个批以结束符GO而终结。
在执行批时,只要其中任一个SQL语句存在语法错误,SQL Server都将取消整个批内所有语句执行。
所有CREATE语句单独构成一个批,不能在批中和其他SQL语句组合使用。

事务

事务是一个用户定义的完整工作单元,事务具有原子性。

事务和批的区别

  • 批是一组整体编译的SQL语句,事务是一组作为单个逻辑工作单元执行的SQL语句。
  • 批语句的组合发送在编译时刻,事务中语句的组合发生在执行时刻。
  • 当在编译时,批中某个语句存在语法错误,系统将取消整个批中所有语句的执行。而在运行时刻,如果事务中某个数据修改违反约束、规则等,系统将回滚整个事务。
  • 如果批内产生一个运行时刻错误,则系统默认只回退到产生该错误的语句。但当打开XACT_ABORT连接选项时,可使系统自动回滚产生该错误的当前事务。

一个事务中也可以拥有多个批,一个批里可以有多个SQL语句组成的事务。

变量

一条SET语句只能为一个变量赋值,而一条SELECT语句可以为多个变量赋值
输出变量时SELECT语句以表格形式输出,PRINT以消息形式输出。
注意CHAR和VARCHAR的区别,CAHR是定长的,未填满时会自动补入空格。

逻辑运算符:AND(与)、OR(或)、NOT(非)

函数

数学函数:ABS()、SQRT()、POWER()、
字符串函数:UPPER()、LOWER()、LEN()、REPLACE()、
日期函数:

  • GETDATE():以DATETIME类型返回当前系统日期。
  • DATEDIFF():以INT类型返回两个给定日期时间值之差。

实验一

考点:
有可能不加set直接等号赋值。
定义变量注意用DECLARE
set和select变量赋值的区别。set一次只能给一个变量赋值。select才能给多个变量赋值。
PRINT只能输出一个变量,SELECT才可以输出多个变量。
字符串使用单引号!

考点:
case一定要搭配end,WHEN后面要有THEN
while后面的循环体有多个语句一定要用begin、end包起来。
while的判断式没有括号,if的判断式有括号。
select和set变量赋值的区别!
判断逻辑表达式中只用一个“=”表示等于

实验3

考点:
存储过程的参数定义时可加可不加括号。
存储过程执行时参数不能加括号。
默认值是在变量类型后面。
PROC和PROCEDURE、EXEC和EXECUTE都可。
输出参数定义时要加OUTPUT,执行也要加,且每个输出参数都要加output。

CREATE PROCEDURE P6 
 @KAIKEHAO VARCHAR(20),
 @PINGJUNCHENGJI FLOAT OUTPUT,
 @ZUIGAOFEN INT OUTPUT,
 @ZUIDIFEN INT OUTPUT 
 AS
 BEGIN
 SELECT @PINGJUNCHENGJI=AVG(成绩),@zuigaofen=MAX(成绩),@ZUIDIFEN=MIN(成绩)
 FROM 选课表 WHERE 开课号=@KAIKEHAO
 END
 GO

 DECLARE @KAIKEHAO VARCHAR(20), @PJ FLOAT, @ZUIGAO INT, @ZUIDI INT
 SET @KAIKEHAO='010101'
 EXEC P6 @KAIKEHAO,@PJ output,@ZUIGAO output,@ZUIDI OUTPUT 
 -- 写out也可以和OUTPUT效果一样,一定要写output不然会报错!考点!!!
 
 SELECT @KAIKEHAO AS 开课号,@PJ AS 平均成绩,@ZUIGAO AS 最高分,@ZUIDI AS最低分

实验4

考点:
在这里插入图片描述

函数内部不能对数据库数据进行增删改。

实验5

考点:
在这里插入图片描述

实验6

考点:
在这里插入图片描述

实验7

考点:

在这里插入图片描述

第六章 索引

聚集索引不一定是主键,主键默认是聚集索引。
表定义主键时自动创建主键索引,并且会自动创建聚集索引(CLUSTERED)。
每个表只允许创建一个聚集索引。聚集索引会改变表中数据行的物理顺序。
NONCLUSTERED:非聚集索引不改变表中数据行的物理存储顺序。一个表可以有多个非聚集索引。
UNIQUE:唯一索引可以确保索引列中不包含重复值。

删除索引一定要注意两种方式的区别

DROP INDEX 表名.索引名 -- 方式一
DROP INDEX 索引名 ON 表名 -- 方式二

必考简答题

在这里插入图片描述

数据页结构详细讲解博文参考

CREATE TABLE T(
A CHAR(4000),
B CHAR(4000),
C CHAR(55)
)

以上创建能否成功,为什么?

  • 不能成功
    数据库中数据按页存储,1页大小为8KB,除去页头96字节,行偏移量至少36字节(B)可用空间8060字节(B),
    定长数据不能跨页存储
    上面代码创建的表每行数据占用8055字节(B)
    加上7B内部开销,需要8062字节,超过8060字节,所以不能成功。
    解决办法:可将某一列数据类型修改为VARCHAR类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值