2015.5.20數據庫
數據庫編程
類型:層次型,網狀型,關係型(目前應用最廣的數據庫類型)c#
常見數據庫:SQLServer,Oracle,DB2,Access,VisualFoxpro,MySQL(目前應用最廣的是SQLServer)服務器
身份驗證:①Windows身份驗證(登陸界面默認賬號名)
②SQLServer身份驗證(必須用SQLServer賬號登陸)函數
數據登錄的幾個要素:
1.服務器類型---數據庫類型
2.服務器名稱---Windows身份驗證:本機用.或local命名
SQLServer身份驗證:遠程計算機名或IP命名
3.身份驗證---Windows身份驗證(管理員使用)
SQLServer身份驗證(開發人員使用)ui
4.用戶名---sa(意爲超級管理員)
5.密碼---需本身設置設計
如何開啓SQL身份驗證?
1.在服務器屬性中,修改身份驗證模式:SQLServer身份驗證和Windows身份驗證
2.啓用sa賬號的兩個功能:①授予訪問數據庫②啓用登陸
3.修改sa的登陸密碼日誌
SQLServer的三層結構:
1.硬盤Data文件夾中的.mdf(存儲數據的地方)
2.SQLServer的服務
3.數據庫管理界面code
建立數據庫 create database
文件類型:
1.主數據文件.mdf(只有一個)(主數據文件需限制大小)排序
2.次數據文件.ndf(能夠有多個)
3.日誌文件.ldf(能夠有多個)
c#與數據庫的數據類型類比
c# 數據庫
int int,small int,big int,tiny int
double float,real,decimal
string char,varchar,nchar,nvarchar,text(nchar長度固定,nvarchar長度不固定)
datetime datetime(1753-1-1,9999-12-31),small datetime(1900-1-1,2079-6-6)
數據庫獨有數據類型:binnary(二進制),image(大型二進制)
刪除數據庫 drop database
修改數據庫 alter database
數據庫操做---大小寫不敏感
建立:create database 數據庫名
刪除:drop database 數據庫名
修改:alter database 數據庫名
數據操做:增、刪、改、查
建表:
create table 表名
(
列名 列的類型 約束,
列名 列的類型 約束,
......
列名 列的類型 約束(限定列名字符長度)
)
與c#代碼註釋不一樣,c#代碼註釋使用//,數據庫建表註釋用--
與c#語法不一樣,c#語法用{},數據庫語法用()
刪表:drop table 表名
改表:alter table 表名
幾個術語:
DDL---Data Definition Language(數據定義語言)
DML---數據操縱語言(開發人員使用)
DCL---數據控制語言(管理員使用)
2015.5.21
數據庫操做語法
建立表:
use 數據庫名
go
create table 表名
(
列名1 數據類型(字符長度),
列名2 數據類型(字符長度),
列名3 數據類型(字符長度),
......
列名n 數據類型(字符長度)
)
插入數據:
INSERT INTO 表名(列名1,列名2,列名3,...,列名n) VALUES(列值1,列值2,列值3,...,列值n)
修改數據:
UPDATE 表名 SET 列名='列值' WHERE 列名='列值'
說明:建立的數據庫、表,寫代碼過程當中標點符號爲英文狀態,與語句不一樣,數據庫、表在寫代碼時字母大小寫不敏感
SELECT查詢:
(1)精確查詢
select * from 表名(*表明查詢全部列)
select 列名 from 表名(查詢某一列或某幾列數據)
select distinct 列名 from 表名(單獨列出某一列數據)
select * from 表名 where 列名錶達式(等號是等值篩選,> < 是不等值篩選,多條件篩選使用and或or)(選出表內部分數據)
select * from 表名 where 列名='列值'---等值篩選
select * from 表名 where 列名>某個值---不等值篩選
select * from 表名 where 列名<某個值---不等值篩選
select * from 表名 where 列名錶達式1 and 列名錶達式2(也可寫做select * from 表名 where between 某個值1 and 某個值2)
select * from 表名 where 列名錶達式1 or 列名錶達式2
(and是求中間範圍內的,or是分段範圍內的)
select distinct 列名錶達式1 from 表名 where 列名錶達式2(在固定條件列名錶達式1的前提下查詢符合列名錶達式2的數據)
select 列名1,列名2*列名3 from 表名(添加新的列,此時新添加的列顯示無列名)
select 列名1,列名2*列名3 新列名 from 表名(添加新的列,此時新添加的列顯示新列名)
select 列名1 漢字列名1,列名2 漢字列名2(將原先的拼音列名改成漢字列名)
select * from 表名 order by 列名+asc升序/desc降序(order by排序,多個列名篩選用逗號隔開列名)
DISTINCT應用:
1.篩選身份證號
2.篩選部門數
(2)模糊查詢:
select * from 表名 where 列名 like'篩選條件'
①select * from 表名 where 列名 like'字符%'(篩選以某個字符開頭的數據)
②select * from 表名 where 列名 like'%字符'(篩選以某個字符結尾的數據)
③select * from 表名 where 列名 like'%字符%'(篩選含有某個字符的數據)
④select * from 表名 where 列名 like'_字符'(篩選在某個位置含有某個字符的數據)
like後單引號中內容,後%意爲以某字符開頭,前%意爲以某字符結尾,先後%意爲含有某字符,_意爲在第幾個位置含有某字符
UPDATE修改:
UPDATE 表名 SET 列名錶達式 FROM 列名=列值(修改一個值)
UPDATE 表名 SET 列名錶達式1,列名錶達式2,列名錶達式3 FROM 列名=列值(修改多個值)
2015.5.24
(一)鏈接查詢---列的擴展
1.等值鏈接查詢(內鏈接)
①笛卡爾積
②join on
2.外鏈接---left,right,full
①left左連接
left左邊的表爲主表,右邊的表爲從表,顯示的結果集以主表爲主,若是從表中沒有和他匹配的數據,就以NULL值填充
②right右鏈接
right右邊的表爲主表
③full全鏈接
每一個表都徹底顯示,互相匹配數據,若是對方沒有則以NULL值填充
3.聯合查詢---行的擴展
用Union將兩個查詢聯合起來顯示,追加行的形式在結果集中顯示,必須保證兩個查詢結果的列的格式是同樣的
(二)子查詢
1.無關子查詢
①select...from...where...not in(select...from...)
②select...from...where...not exsits(select...from...)
2.相關子查詢
2015.5.24
5個統計函數:
個數count 最大max 最小min 求和sum 平均avg
select 列名,統計函數名 from 表名 group by 列名 having count(*) 不等值查詢(根據關鍵字篩選)(having與group by子句配合使用)
判斷某個表中某個數據是否爲空
select * from 表名 left join 表名 on 表名.列名=表名.列名 left join 表名 on 表名.列名=表名.列名 where 表名.列名 is not null
2015.5.28
***數據庫·表的約束***
1、防止同一條數據徹底重複
1.主關鍵字約束(主鍵約束)---PK
①可以惟一地區分每一行數據---不準重
②表中的數據按照主關鍵字排序---有序
③主關鍵字不能爲空---不爲空
④一個表只能有一個主鍵,但能夠設置組合主鍵
操做:
添加主鍵:在表的設計界面,在相應的列上右擊「設爲主鍵」
刪除主鍵:在表的設計界面,在相應的列上右擊「刪除主鍵」
2.惟一鍵約束(候選鍵)---UK
①惟一鍵不準重,能夠爲空
②一個表中能夠有多個惟一鍵
③惟一鍵不能自動排序
操做:
在表的設計界面上右擊「索引/鍵」,在彈出窗口上點擊左下角「添加」,右鍵屬性列表,修改類型「惟一鍵」,設置列
tips:
ctrl+0 清空不想要的某列某項數據
3.自增加列(標識列,Identity列)
①不能手動向自增加列裏面填值,若是要寫INSERT語句的話,則INSERT語句應當把這一列忽略
②自增加列主要用於整型、長整型、Decimal型
③不要隨便把自增加列設置爲主鍵
操做:
在表的設計界面中選中相應的列,在下面的屬性面板→標識規範→選擇「是」
2、防止有些該填的沒有填
1.非空約束
不能爲NULL
操做:
在表的設計界面中「容許NULL值」的複選框去掉
2.默認值
若是不給賦值的話,會使用默認值填上
操做:
在表的設計界面,選擇相應的列,在下面的屬性面板中設置默認值
3、防止亂填
1.類型
2.Check約束---CK
按照某種規則對數據進行檢查
操做:
在表的設計界面中,右擊相應的列,選擇CHECK約束,在彈出的對話框中,設置約束的名稱和表達式
3.外鍵約束---主表,從表
①主表是用來約束從表的,外鍵應當創建在從表上,從表中的外鍵列是不能隨便亂填內容的,只能填寫主表主鍵中存在的數據
②一旦創建起外鍵關係來,從表的外鍵不能亂填,反過來,主表中的主鍵列也不能亂刪除亂改動
操做:
先建好主表,從表的設計界面上右擊「關係」,在彈出的對話框中選擇「添加」,在右邊屬性列表中設置「表和列的規範」
★級聯刪除的設置
***數據庫函數***
1、數學函數
SQRT 平方根
select SQRT(2)//輸出結果爲1.414
ABS 絕對值
select ABS(-234)//輸出結果爲234
ROUND
①保留小數點後幾位
select ROUND(4.532,1)
②四捨五入
select ROUND(4.532,0)//輸出結果爲4.500
CEILING 取大於已知小數的最小整數
select ceiling(COUNT(*)/5.0) from News
FLOOR 取小於已知整數的最大整數
select floor(COUNT(*)/5.0) from News
2、字符串函數
LOWER 大寫轉小寫
select LOWER('UserName')---username
UPPER 小寫轉大寫
select UPPER('UserName')---USERNAME
LTRIM 壓縮左邊空格
select LTRIM(' me')---me
RTRIM 壓縮右邊空格
select RTRIM('me ')---me
*截取字符串
select LEFT(Title,5) from News 截取前幾個字符
select RIGHT(Title,5) from News 截取後幾個字符
select SUBSTRING(Title,3,5) from News 任意位置截取字符//3表示截取字符位置,5表示截取字符個數
*替換字符串
select REVERSE(Title) from News 翻轉字符串
select CHARINDEX('中國',Title) from News 字符串出現的位置---標題中字符"中國"出現的位置
select REPLACE(Title,'中國','美國') from News 替換字符串---標題中字符"中國"的位置替換成"美國"//"中國"表示原字符,"美國"表示替換字符
select REPLACE(Title,3,4,'china') from News 指定位置、指定個數替換字符串//3表示替換位置,4表示替換個數,"china"表示替換字符
3、其餘
select RAND()
隨機數生成函數,0-1之間
select LEN('china')//輸出結果爲5
取字符串長度
select GETDATE()
獲取當前時間
select YEAR(sbirthday) from Student
取日期時間年份
select MONTH(sbirthday) from Student
取日期時間月份
select DAY(sbirthday) from Student
取日期時間天數
*取日期時間部分字符
select DATEPART(yy,sbirthday) from Student 取日期時間年份
select DATEPART(mm,sbirthday) from Student 取日期時間月份
select DATEPART(dd,sbirthday) from Student 取日期時間天數
select DATEPART(hh,sbirthday) from Student 取日期時間小時
select DATEPART(mi,sbirthday) from Student 取日期時間分鐘
select DATEPART(ss,sbirthday) from Student 取日期時間秒數
*轉換格式
select CAST(123 as varchar(20))//輸出varchar格式123
select CAST('123' as int)//輸出int格式123
2015.5.30
視圖View
視圖:查詢結果---與視圖相對應的是表,表纔是真正存儲數據的地方
視圖不能存儲數據,只展現查詢結果
語法:
create view View_表名
as
select查詢
go
as...go等效於c#語句中的花括號
使用建立的視圖:
select * from view_表名
tips:
①視圖就是爲了查詢數據方便,通常不要試圖向視圖中插入數據,容易出錯。
②視圖能夠由一個表生成,也能夠由多個表生成,還能夠由表中各視圖生成新的視圖。
掌握:
1.視圖是什麼
2.會建視圖、會查視圖
3.知道視圖的主要功能是查詢,不是增刪改
索引Index
索引:爲了提升查詢效率
索引的類型:簇索引(彙集索引)、非簇索引(非彙集索引)---簇索引比非簇索引檢索效率高
操做:在表的設計界面上右擊「索引/鍵」,在彈出窗口上點擊左下角「添加」,設置索引
tips:
①數據的默認存儲次序跟簇索引的次序是同樣的。一個表中只有一個簇索引。
②非簇索引是單獨放置的,查詢的時候,先查詢非簇索引,再根據非簇索引查詢內容。一個表能夠有多個非簇索引。
要記住的:
1.索引是什麼
2.索引的分類、效率、原理
3.索引提高查詢效率,但會影響增刪改的效率
4.如何建索引、刪索引
存儲過程
SQL編程
數據類型:列的類型
變量定義:declare 變量名 類型名---變量名以@開頭
賦值和取值:
賦值:set 變量=值或select 變量=值
eg.set @a='hello world'
select @a='hello world'
取值:變量名
declare @a varchar(50)---定義變量
set @a='hello world'---給變量賦值
print @a---取值輸出
運算符:算術、關係、邏輯、其餘
算術:+ - * / % 沒有++(自增) --(自減)
關係:> < >= <= = <> != //<> !=都是不等於,但經常使用的是<>
邏輯:and(與) or(或) not(非)
其餘:
between...and...
exists
like
is(null)
沒有條件運算符?: 也沒有複合運算符%= += -=()
條件分支:
if 表達式---必定注意SQL的if語句不加小括號
begin
end
else
begin
end
存儲過程的建立:
create procedure(或簡寫做proc) 存儲過程名
形參名 形參類型,
形參名 形參類型,
......
形參名 形參類型
as
函數體
go
存儲過程的調用:
存儲過程名 實參1,實參2,...實參n
案例一:往Info中送入數據,若是主鍵已經存在,則執行修改操做,不然執行插入操做
案例二:作一個存儲過程,輸入水果代號、人員用戶名、購買數量,把庫存和帳戶扣掉相應的值
案例三:同案例二。但要檢查:1.庫存夠不夠 2.餘額夠不夠
案例1
create procedure testinfo
@code varchar(50),
@name varchar(50),
@sex bit,
@nation varchar(50),
@birthday datetime
as
declare @c int
select @c=count(*) from info where code = @code
if @c>0
begin
update info set name = @name, sex = @sex, nation = @nation, birthday = @birthday where code = @code
end
else
begin
insert into info(code,name,sex,nation,birthday)values(@code,@name,@sex,@nation,@birthday)
end
go
testinfo '代號','姓名1','性別1','民族','生日1'
select * from info//執行插入數據
testinfo '代號','姓名2','性別2','民族','生日2'
select * from info//執行修改數據
案例2
create proc buyfruit
@uid varchar(50),--用戶名
@id varchar(50),--水果代號
@count int--購買數量
as
--1、扣庫存
update fruit set numbers = numbers - @count where ids = @id
--2、扣錢
declare @cost decimal--花費
--1.查出單價
declare @p decimal--單價
select @p=price from fruit where ids = @id //從表中查詢單價
--2.計算花費
set @cost=@count*@p
--3.修改帳戶餘額
update login set account = account - @cost where username = @uid
go
buyfruit '用戶名代號','水果代號',購買數量//執行後查詢庫存和帳戶是否扣掉相應的值
↓ 帳戶扣掉的錢數和實際應扣的錢數不符,檢查後發現是@count的數據類型不對,應強轉爲cast(@count as decimal)且應定義@cost、@p的decimal
create proc buyfruit
@uid varchar(50),--用戶名
@id varchar(50),--水果代號
@count int--購買數量
as
--1、扣庫存
update fruit set numbers = numbers - @count where ids = @id
--2、扣錢
declare @cost decimal(8,2)--花費
--1.查出單價
declare @p decimal(8,2)--單價
select @p=price from fruit where ids = @id //從表中查詢單價
--2.計算花費
print'單價:'+cast(@p as varchar(50))
set @cost=cast(@count as decimal)*@p
print'花費:'+cast(@cost as varchar(50))
--3.修改帳戶餘額
update login set account = account - @cost where username = @uid
go
buyfruit '用戶名','水果代號',個數//執行後查詢庫存和帳戶是否扣掉相應的值
↓由於屬於修改,因此create應換爲alter
alter proc buyfruit
@uid varchar(50),--用戶名
@id varchar(50),--水果代號
@count int--購買數量
as
--1、扣庫存
update fruit set numbers = numbers - @count where ids = @id
--2、扣錢
declare @cost decimal(8,2)
--1.查出單價
declare @p decimal(8,2)
select @p=price from fruit where ids = @id //從表中查詢單價
--2.計算花費
set @cost=cast(@count as decimal)*@p
--3.修改帳戶餘額
update login set account = account - @cost where username = @uid
go
buyfruit '用戶名','水果代號',個數//執行後查詢庫存和帳戶是否扣掉相應的值
2015.5.31
案例3
select * from fruit
select * from login
alter proc fruitbuy
@uid varchar(50),--用戶名
@id varchar(50),--水果代號
@count decimal(8,2)--購買數量
as
1、檢查餘額和庫存
--(一)準備數據:購買數量、庫存數量、總花費、餘額
--1.準備庫存
declare @kc int
select @kc=numbers set fruit where ids = @id
--2.準備餘額
declare @ye decimal(8,2)
select @ye=account set login where username = @uid
--3.準備花費
--(1)準備單價
declare @dj decimal(8,2)
select @dj=price set fruit where ids = @id
--(2)計算花費
declare @cost decimal(8,2)
select @cost=@dj*@count
--(二)比較判斷
if @kc>numbers and @ye>account
begin
2、扣庫存扣餘額
--(一)扣庫存
update fruit set numbers = numebers - @count where ids = @id
--(二)扣餘額
update login set account = account - @cost where username = @uid
--(三)向訂單中添加數據
declare @ordercode varchar(50)
set @ordercode=@uid+cast(YEAR(GETDATE()) as varchar(50))+cast(MONTH(getdate()) as varchar(50)) + cast(DAY(GETDATE()) as varchar(50)) + cast (DATEPART(hour,GETDATE()) as varchar(50))+cast(DATEPART(minute,GETDATE()) as varchar(50)) +cast(DATEPART(SECOND,GETDATE()) as varchar(50))
insert into orders values(@ordercode,@uid,GETDATE())
--(四)向訂單明細中加數據
insert into orderdetails values(@ordercode,@id,@count)
print'購買成功'
else
begin
print'庫存或餘額不足'
end
go
select * from orders
fruitbuy '用戶名代號','水果代號',購買數量
觸發器
1.什麼是觸發器?---一段SQL代碼,掛到某個表的某個增、刪、改的操做上,當這個表執行相應的操做時,就會觸發這段相應的SQL代碼。
觸發器與存儲過程的區別:
①存儲過程是獨立於表存在的,觸發器須要依附某個表的某個操做。
②存儲過程須要使用名稱去調用才能執行,觸發器則在表的操做過程當中自動被觸發調用。
2.觸發器的分類:
after觸發器---先執行表的增刪改的操做後,再觸發觸發器。
instead of 觸發器---不執行表的增刪改操做,它的這些操做只起到觸發觸發器的功能。
3.建立觸發器的語法
create trigger 觸發器名 on 表名 after/instead of insert/delete/update
as
go
4.觸發器中兩個臨時表:inserted,deleted---觸發器在運行時的有着固定名字的兩個臨時表
這兩個表是臨時表,觸發器執行完成後,會自動消失,再次觸發會再次建立。
這兩個表的結構與on後面的表的結構是同樣的(列名、列數、類型),並且裏面只有一條記錄。
插入操做:把新增的數據放到inserted表中。
刪除操做:把刪除的數據放到deleted表中。
修改操做:把舊數據放到deleted表中,把新數據放到inserted表中。
5.對兩個臨時表的使用。
從兩個臨時表中把數據取出來放到變量中,以備後面的使用。
案例一:作一個汽車變更表,汽車的增長、刪除後都往變更表中增長一條。用觸發器來實現。(after觸發器)
案例二:把Info表的數據刪除,刪除以前先用觸發器把Work和Family兩個表中的相應數據刪掉。(instead of觸發器)
案例1
select * from Car
select * from cardelete
delete from Car where Code='c003'
--建立觸發器
create trigger TR_Car_Delete on car after delete
as
--觸發器在運行的時候會有兩個臨時表,表的名子是固定的分別叫inserted,deleted
--第一步:把剛剛刪除的這行數據的name和price取出來,放在兩個變量中
declare @name varchar(50),@price decimal(8,2)
select @name=name,@price=price from deleted
--第二步:把上面的兩個變量插入到CarDelete表中
insert into CarDelete values(@name,@price)
go
案例2
create trigger TR_Car_Insert on car after insert
as
--第一步:把插入的數據的name和price取出來,放在兩個變量中
declare @name varchar(50),@price decimal(8,2)
select @name=name,@price=price from inserted
--第二步:把上面的兩個變量插入CarDelete表中
insert into cardelete values(@name,@price)
go
select * from info
select * from work
select * from family
delete from Info where Code='p003'
alter trigger TR_INFO_DELETE on Info instead of delete
as
--從臨時表中獲取出主鍵值
declare @code varchar(50)
select @code=code from deleted
--從work中的InfoCode列中刪除上面那個值
delete from work where infocode = @code
--從Family中的InfoCode列中刪除上面的那個值
delete from family where infocode = @code
--從Info中刪除Code中上面的那個值
delete from info where code = @code
go
事務:
1、什麼是事務
可以保證數據一致的代碼控制。它要麼執行提交,要麼回滾到事務的初始狀態。
2、事務的四大特性:ACID
A:原子性(Atomicity)---事務不可折開,要麼都執行,要麼都回滾,無中間狀態。
C:一致性(Consistency)---數據先後要一致。
I:隔離性(Isolation)---事務在執行的過程當中是不準外界干擾的。
D:持久性(Durability)---事務的全部操做是存在硬盤上的。
3、事務的代碼
定義:
事務的開始:begin transaction(tran)
事務回滾:rollback
事務提交:commit
@@ERROR---系統變量,判斷最近一條語句是否執行成功。成功返回0,不然返回錯誤代號。
例如:人員信息表中有人員代號列、人員姓名列、人員性別列、人員民族列、人員生日列
法一:使用@@ERROR和if判斷來使用事務
declare @t int --記錄累計的錯誤信息
set @t = 0
begin tran --啓動事務
insert into Info values('p003','吳倩','0','n004','1990-8-12')
set @t = @t + @@ERROR --累計錯誤信息
insert into Info values('p006','張三','1','n004','1992-3-19')
set @t = @t + @@ERROR --累計錯誤信息
insert into Info values('p005','李四','0','n001','1991-12-24')
set @t = @t + @@ERROR --累計錯誤信息
if @t<> 0 --若是累計發現有錯誤 ,就回滾
begin
rollback
end
else --若是累計中沒有發現錯誤,就提交
begin
commit
end
法二:使用try...catch....來使用事務
begin try
insert into Info values('p007','王五','0','n002','1991-4-1')
insert into Info values('p009','張四','1','n004','1992-3-19')
insert into Info values('p008','李九','0','n001','1991-12-24')
commit
end try
begin catch
rollback
end catch
數據庫總結
三層關係:文件(mdf主數據文件,ndf次數據文件,ldf日誌文件) 界面(①可視化的操做②代碼填寫界面) 服務(服務名稱MSSSQLSERVER)
兩個驗證:Windows驗證,SQLServer驗證
如何開啓SQLServer驗證?
在服務器屬性中,設置身份驗證模式爲SQLServer和Windows驗證,並設置sa帳戶密碼
數據庫、表的幾個操做:
create(建立)/drop(刪除)/alter(修改) database/table 數據庫名/表名
text---長文本,可放置數量較大的數據(通常的存儲類型只能放置4000漢字或8000英文)
表的三種界面:設計界面、編輯界面、查詢界面
表的約束:
①防空:非空、默認
②防重:主鍵(不能空不能重)、惟一鍵(可空但不能重)、自增加列(存放整型、Decimal型數據,使用過的數據不能再次使用)
③防錯:check、外鍵(保證引用的完整性,通常有兩個表:主表,從表)、類型
表的增刪改查
增 insert into 表名(列名) values(值)---列名和值要一一對應
刪 delete from 表名 where子句
改 update 表名 set 列名=值 where子句
查 select
①簡單查詢:【行】篩選、【列】投影(特殊:distinct去重複)
②複雜查詢:group by,join,子查詢,聯合,篩選(等值,不等值),排序order by(升序asc,降序desc)
(不等值查詢的特殊形式:多條件查詢 and,or)
(多條件查詢的特殊形式:模糊查詢 ①like②%,_)
(group by是針對某列的查詢,語法是group by+列名/統計函數)
(group by...having(*)是對分組後的數據進行再篩選)
鏈接查詢---列的擴展①,from...where子句②join...on...(外連:left join,right join 內連:join)
聯合查詢---兩個表的某幾列橫向粘貼造成一個新表,再進行數據查詢union
子查詢---無關子查詢,相關子查詢
其餘查詢---in,is null,between...and...,exists
視圖---主要用來展現數據,調用簡單,運行速度快,但不能進行增刪改
create view 視圖名
as
go
索引---提升查詢效率,但同時增刪改效率會下降
create index 索引名
存儲過程
create procedure(proc) 存儲過程名
as
go
觸發器---after觸發器,instead of觸發器
create trigger 觸發器名 on 表名 after/instead of 操做
as
go
事務---獨立執行的代碼塊
(四特性:ACID---A:原子性(Atomicity)C:一致性(Consistency)I:隔離性(Isolation)D:持久性(Durability))
(三操做:開始---begin transaction(tran) 提交---commit 回滾---rollback)
@@ERROR+if... --- @@ERROR是系統變量,@@ERROR+if...用來判斷最近一條語句是否執行成功,成功返回0,不然返回錯誤代號
begin try,begin catch 抓錯語句
做業:試着寫一個分頁存儲過程(汽車表)(子查詢)