sqlserver基礎學習總結(一)

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.不能修改視圖中通過計算得到的數值;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章