聚集索引:表中各行的物理顺序和键值的逻辑(索引)顺序相同(每个表只能有一个)(不允许空值)(选用以范围查询的列)(频繁更新的列和非唯一的列通常不选用聚集索引)(避免非常多或非常宽的键上创建聚集索引)(create table 和 alter table 创建主键会默认创建聚集索引)
非聚集索引:除聚集索引的索引 可以有多个 但要小于249个()(指针指向位于索引页中指针对应的物理数据)(页级别上不包含全部数据)
唯一索引:允许空值: 只能有一个(不允许两行具有相同的索引值)(实施实体完整性)(在创建主键约束和唯一性约束时自动创建)
非聚集索引创建原则:索引不是越多越好 (当选择用在非聚集索引的列时,要查找在where join order by 子句中频繁引用的那些列)(一个索引最多可以使用16个列 所有索引键列组合起来不超过900字节)
经常插入操作的表上, 使用Fillfactor(填充因子)建索引减少页拆分
unique 唯一索引
clustered 聚集索引
nonclustered 非聚集索引
ix_ 代指索引
多列用 , 分隔 desc 降序 不加为升序
fillfactor = 填充因子 (百分比)
split(拆分)
视图
(封装)放在from子句中(可以当作表来用)
视图的作用:
1,可以筛选表中的行
2,防止未经许可的用户访问敏感数据
3,降低数据库的复杂度
4,将多个物理数据库抽象为一个逻辑数据库
create view (name) as (select语句) go
Exec sp_helptext ‘视图名称’;
encryption(加密)
可更新视图
insert update delete 等操作只能引用一个表中的列, 不允许直接修改基础表 只允许修改视图
可更新视图中不能包含聚合函数, select语句中不能使用group by 或 having子句, insert update delete 语句更新 发生变化的数据只能来自一个表, 必须包含基表的必填列, 视图不满足以上条件 可以只用 instead of触发器更新
第七章 事务
--创建银行信息表
if object_id(\'Account\') is not null drop table Account;
go
create table Account
(
AccountId char(4) primary key,
Name varchar(20) not null,
Balance decimal(18, 2) not null
);
go
alter table Account add constraint CK_Account_Balance check (Balance >= 2);
insert into Account values
(\'0001\', \'zhangsan\', 2),
(\'0002\', \'zhangsi\', 20000);
select * from Account;
begin transaction
begin try
update Account set Balance = Balance + 20000 where AccountId = \'0001\';
update Account set Balance = Balance - 20000 where AccountId = \'0002\';
commit transaction;
end try
begin catch
rollback transaction
end catch
每条查询语句自成一个事务(transaction)
事务是作为单个逻辑工作单元执行的一系列操作, 是一个不可分割的工作逻辑单元
事务的属性:
原子性(Atomicity)必须是原子工作单元 不可分
一致性(Consistency)事务完成时, 数据处于一致状态
隔离性(Isolation)并发的事务时彼此隔离的 互不影响
永久性(Durability)事务完成就永久保存
begin transaction 开始事务
commit transaction 提交事务
rollback transaction 回滚事务
save tran 创建事务保存点(rollback把事务保存点之后的操作回滚 (回到事务保存点))
自动提交事务: 每条单独的T-SQL语句作为一个事务成功自动提交 错误自动回滚
显示事务: Begin transaction 指定事务的开始
隐性事务:set implicit transactions on 语句
事务的嵌套(父事务, 子事务)父事务回滚的时候以提交的子事务也会回滚
锁 是事务获取的一种控制资源 (保护数据资源, 防止其他食物对数据进行冲突或不兼容的访问)
数据并发访问时怎么保证数据的安全性
排它锁:修改数据时 事务会为所依赖的数据资源请求排它锁, 一旦授予, 事务将一直持有排它锁, 直至事务完成