T-SQL
一.數據庫的創建在開發中的步驟
1.1收集信息
1.2概念設計(E-R圖)
1.3詳細設計(數據庫模型圖)
1.4審核數據庫(三大範式)
2.1 E-R
矩形:實體
橢圓:屬性
菱形:關系
3.1 映射關系
一對一,一對多,多對一,多對多
4.1 三大範式
第一範式:每一列都要保證原子性,分的不能再分了
第二範式:在滿足1NF基礎上,每一張表只能表述一件事(有主鍵)
第三範式:在滿足2NF基礎上 ,確保除主鍵之外的列都必須和主鍵有直接的關系,而不是間接地關系
二.建庫建表建約束
2.1 建庫
建庫:create database myschool;
三種文件格式:主文件.mdf,次要文件
create database myschool
--主文件
on [primary]
(
name=‘‘, --邏輯名稱
filename=‘。mdf’,-- 文件路徑
size=10,--初始大小
maxsize=100 ,--最大大小
filegrowth=10 增長率 不能加百分號
),
--次要文件
(
name=‘‘, --邏輯名稱
filename=‘.ndf’,-- 文件路徑
size=10,--初始大小
maxsize=100 ,--最大大小
filegrowth=10 增長率 不能加百分號
)
on log
(
name=‘‘, --邏輯名稱
filename=‘
size=10,--初始大小
maxsize=100 ,--最大大小
filegrowth=10 增長率 不能加百分號
)
給數據庫添加文件
alter database myschool
add file
--次要文件
(
name=‘‘, --邏輯名稱
filename=‘.ndf’,-- 文件路徑
size=10,--初始大小
maxsize=100 ,--最大大小
filegrowth=10 增長率 不能加百分號
)
2.2 建表
Create table 表名
(
列 數據類型 數據特性(null or not null)
)
自動增長列 identity(1,1)
比如
Create table student
( id int identity(1,1) not null
)
刪除表 drop table 表名
刪除數據 delete 表名,truncate 表名
2.3 鍵約束
2.3.1 主鍵約束
Alter table 表名
Add constraint pk_約束名 primary key (列名)
2.3.2 唯一約束
Alter table 表名
Add constraint uq_約束名 unique (列名)
2,3.3 檢查約束
Alter table 表名
Add constraint ck_約束名 check (列名<=100)
2.3.4 默認約束
Alter table 表名
Add constraint df_約束名 default(‘默認值’) for 列名
2.3.5 外鍵約束
Alter table 外鍵表
Add constraint fk_約束名 foreign key 列名 references 主鍵表(列名)
2.3.6 刪除約束
Alter table 表名
Drop constraint 約束名
2.4建視圖
2.4.1 創建
If exists (select * from sys.objects where name=’視圖名’)
Drop view 視圖名
Create view 視圖名 as sql語句
註意: 視圖中不能單獨的使用order by 必須與top 同時出現
2.4.2 修改
Alter view 視圖名
三.sql編程
3.1 定義變量
局部變量Declare @變量名 數據類型=值
全部變量 @@error 錯誤號,@@identity 獲取最近一次的值 @@version版本號
3.2 賦值
3.2.1 set
set @變量名=值 or(set @變量名=(子查詢)) ,一次只能給一個變量賦值
3,2,2 select
Select @變量名 =值 ,select @變量名=字段,@變量名=字段 from 表,可以給多個變量賦值;當返回多個數據的時候取最後一個
3.3 轉換數據類型
3.3.1 convert
Convert (數據類型,變量)
特殊的可以對datetime 類型的字段轉換 比如convert(字段,102)
3.3.2 Cast
Cast(變量名 as 數據類型)
3.4 if else
If (條件)
Begin
---sql
End
Else
Begin
--sql
end
3.5 while
While(條件)
Begin
End
3.6Case
Case when 條件 then 結果
When 條件 then 結果
Else
End
3.7 GO
批處理,把多條sql打個包一起發送服務器執行,執行速度加快
四:子查詢
select * from ( 子查詢 )別名
4.1 in
Select * from 表名 where 列名 in(子查詢)
Select * from 表名 where 列名 in(‘’,’’,’’)
4,2 not in
Select * from 表名 where 列名 not in(子查詢)
Select * from 表名 where 列名 not in(‘’,’’,’’)
4.3 exists and not exists
exists 用法1
if exists (select * from table ===) 判斷是否能查出數據,如果能則返回true,否則返回false
exists 用法2
select * from student where exists(select * from grade where grade.gradeid=student.gradeid)
註意:exists 用法2比in 用法2效率高
五.存儲過程
5.1 創建一個無參的存儲過程
Create proc 存儲過程名稱
As
Sql 語句
Go
5.2 創建一個有輸入參數的存儲過程
Creta proc 存儲過程名稱
@變量名 數據類型
As
Sql 語句
Go
5.3 創建一個有默認值的存儲過程
Creta proc 存儲過程名稱
@變量名 數據類型=’默認值’
As
Sql 語句
Go
5.4 創建一個有輸入有輸出的存儲過程
Create proc 存儲過程名
@輸入變量 數據類型,
@輸出變量 數據類型 output
As
Sql語句
Go
5.5 調用存儲過程
Exec 存儲過程名稱
Execute 存儲過程名稱
經驗:當遇到go的時候 exec 可以省略
5.6 事務
開啟事務 begin transaction
提交事務 commit transaction
事務回滾 rollback transaction
六.索引
6.1 唯一索引
不能有相同的兩行數據,當創建一個唯一約束的時候系統自動分配一個唯一索引
6.2 主鍵索引
特殊的唯一索引,當創建一個主鍵約束的時候,系統自動分配一個聚集的主鍵索引
註意:如果不想讓主鍵占用聚集索引,可以在創建的時候,把非聚集表現出來
6.3 聚集索引
根據系統算法排列的,一張表只能有一個聚集索引(類似與拼音查字典)
6.4 非聚集索引
根據數據邏輯排列,一張表可以有多個非聚集索引(類似與偏旁部首和筆畫)
6.5 全文索引
針對於大型的數據文本類型比如(long,text),key查詢;
其它索引都是匹配查詢
6.6 復合索引
說明:可以給多列創建一個索引
6.7 創建索引
Create [unique][nonclustered][clustered]
Index ix_索引名稱 on table (列名,列名..)
With fillfactor=20 (不能加百分號)
6.9 刪除索引
Drop index table.索引名稱
6.10 指定索引查詢
Select * from table with(index=索引名稱) where …
T-SQL