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