文章目录

  • 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

sql server自学教程 pdf_User

查看视图信息

sp_help stu_glass

sql server自学教程 pdf_sql server_02

修改视图

alter view stu_glass as select name from student;

sql server自学教程 pdf_sql server_03


使用视图修改表数据;因为视图是一张虚拟表,其中并没有数据,所以对视图进行insert update delete实际上是对基础表的操作。

insert into stu_glass(id,name,glass)  values(4,'杲杲','NB_612')
select * from stu_glass

向视图中插入了一条数据,实际上视图中并没有:

sql server自学教程 pdf_数据库_04


查看student表,发现多了插入的数据

select * from student;

sql server自学教程 pdf_sql server自学教程 pdf_05


这时再向std_details中插入一条id为4的数据,然后再查视图:

insert into stu_detail(s_id,glass,addr)values(4,'6-3','ddddddd')
select * from stu_glass

sql server自学教程 pdf_数据_06


为什么会是这样的呢?因为视图本质上是已经编译好的sql语句,是基于sql语句执行出的结果集。视图并不像表那样占用真实的物理空间,它只是一个概念化的存在,是一种查看表数据的方法;因此从安全的角度看,视图在用户和表之间设置了一道屏障,将表结构隐藏了起来

需要注意的是
1.修改视图中的数据时,要修改的数据只能来自一个基础表;
2.不能修改视图中通过计算得到的数值;