文章目录
- 0.引言
- 1.创建一个数据库
- 2.游标操作。
- 3.索引
- 4.视图
0.引言
本文总结主要记录了一些自己不熟悉的知识点,力求做到每个知识点都有一个实例。
1.创建一个数据库
--创建数据库
use master
go
if exists(select name from master..sysdatabases where name='vsm')
begin
drop database vsm;
end
create database vsm on primary
(
name= 'vsm',
filename='D:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\vsm.mdf',
size = 5120KB, --主控数就文件大小
MAXSIZE = 100mb, --主数据文件最大增长空间
filegrowth = 1mb --文件增长大小设置为1MB
)
2.游标操作。
游标操作能够方便的遍历数据表。
---游标操作---
drop table ST_User;
create table ST_User
(
id int primary key identity(1,1),
name varchar(32),
info varchar(32),
local_time datetime
)
select * from ST_User;
declare @i int = 1;
while @i<10
begin
declare @str varchar = convert(varchar,@i);
insert into ST_User(name,info,local_time) values('he_'+@str,'man_'+@str,dateadd(dd,@i,GETDATE()));
set @i += 1;
end
select * from ST_User;
--select convert(varchar(10), getdate(), 120) + ' 00:00:00';
--select convert(varchar(10), dateadd(dd, 1, getdate()), 120) + ' 00:00:00';
declare user_cur cursor for select id,name,info from ST_User
declare @ID int,@name varchar(32),@Info varchar(32)
open user_cur
fetch next from user_cur into @ID,@name,@Info
--select @@FETCH_STATUS
while @@FETCH_STATUS = 0
begin
fetch next from user_cur into @ID,@name,@Info
print @name
end
close user_cur
deallocate user_cur
---游标操作---
3.索引
索引一个单独的,存储在磁盘上的数据库结构,包含着对数据表中所有记录得到引用指针。
优点:
- 1.唯一索引可以保证数据库表中每一行的唯一性
- 2.加快数据的查询速度(创建索引的最主要原因)
缺点:
- 1.创建索引和维护索引都要耗费时间
- 2.索引需要占用磁盘空间
- 3.对表中数据进行增删改时,索引也要动态的维护,降低了数据库的维护速度
索引设计原则:
- 1.索引并非越多越好,一个表中如果有过多的索引,不仅会占用大量的磁盘空间还会影响INSERT,DELETE,UPDATE等语句的性能;
- 2.避免在经常更新的表进行过多的索引,并且索引的列也要尽可能的少;
- 3.数据量小的表最好不要建立索引;
- 4.在条件表达式上经常用到的列,不同值较多的列上建立索引,避免在不同值较少的列上建立索引
- 5.在频繁进行排序或分组的列上建立索引。
4.视图
4.1创建视图
---视图操作---
create table student(
s_id int,
name nvarchar(10)
);
create table stu_detail(
s_id int,
glass varchar(24),
addr varchar(100)
)
insert into student(s_id,name)values(1,'xiaoming'),(2,'xiaohong'),(3,'huahua');
insert into stu_detail(s_id,glass,addr)values(1,'6-1','aaaaaaaaaa'),(2,'6-2','bbbbbbbbbb'),(3,'6-3','ccccccccccc')
select * from student;
select * from stu_detail;
go
create view stu_glass(id,name,glass)
as select student.s_id,student.name,stu_detail.glass
from student,stu_detail
where student.s_id=stu_detail.s_id
go
查询视图
select * from stu_glass
查看视图信息
sp_help stu_glass
修改视图
alter view stu_glass as select name from student;
使用视图修改表数据;因为视图是一张虚拟表,其中并没有数据,所以对视图进行insert update delete实际上是对基础表的操作。
insert into stu_glass(id,name,glass) values(4,'杲杲','NB_612')
select * from stu_glass
向视图中插入了一条数据,实际上视图中并没有:
查看student表,发现多了插入的数据
select * from student;
这时再向std_details中插入一条id为4的数据,然后再查视图:
insert into stu_detail(s_id,glass,addr)values(4,'6-3','ddddddd')
select * from stu_glass
为什么会是这样的呢?因为视图本质上是已经编译好的sql语句,是基于sql语句执行出的结果集。视图并不像表那样占用真实的物理空间,它只是一个概念化的存在,是一种查看表数据的方法;因此从安全的角度看,视图在用户和表之间设置了一道屏障,将表结构隐藏了起来
需要注意的是
1.修改视图中的数据时,要修改的数据只能来自一个基础表;
2.不能修改视图中通过计算得到的数值;