常用SQL語句收藏

常用函數:日期

DAY(date_expression ) --函數返回date_expression 中的日期值 select DAY(getdate())
MONTH(date_expression ) --函數返回date_expression 中的月份值 select month(getdate())
YEAR(date_expression ) --函數返回date_expression 中的年份值 select YEAR(getdate())
DATEADD(<datepart> ,<number> ,<date>)  select DATEADD(yy,1,getdate())

--函數返回指定日期date 加上指定的額外日期間隔number 產生的新日期
GETDATE() --函數以DATETIME 的缺省格式返回系統當前的日期和時間
Datepart的含義及縮寫:
年份 yy、yyyy 
季度 qq、q 
月份 mm、m 
每年的某一日 dy、y 
日期 dd、d 
星期 wk、ww 
小時 hh 
分鐘 mi、n 
秒 ss、s 
毫秒 ms 

函數創建

CREATE FUNCTION CheckFnctn()
RETURNS int
AS 
BEGIN
   DECLARE @retval int
   SELECT @retval = COUNT(*) FROM class
   RETURN @retval
END;
刪除一個函數:
drop function dbo.CheckFnctn

函數修改

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER FUNCTION [dbo].[CheckFnctn]()
RETURNS int
AS 
BEGIN
   DECLARE @retval int
   SELECT @retval = COUNT(*) FROM class
   RETURN @retval
END;

函數使用

可以在增,刪,改查,視圖,觸發器,存儲過程,約束,等幾乎所有地方使用函數.
以下是在查詢語句中使用函數.
select dbo.CheckFnctn();

事物

一個完整的事務就是其中的每個操作要麼都完成,要麼都不做.回到事務開始前的狀態.
begin TRANSACTION ;
ALTER INDEX idx_class on class REBUILD;
select * from class;
commit TRANSACTION ;
需要注意的是,不同的數據庫,事務的開始,結束語法可能不一樣.例如:在informix中是:begin work和commit;

—常見的情況是:分爲表鎖和行鎖
—加鎖與解鎖.
—排它鎖(獨佔鎖)與共享鎖.
—鎖加在 SQL Server 資源上(如在一個事務中讀取或修改的行),以防止各種事務併發使用資源。例如,如果一個排它(X) 鎖被一個事務加在某一表的某一行上,在這個鎖被釋放前,其他事務都不可以修改這一行。 

事物內加鎖

USE gaotest
GO
--此句的含義解釋起來較麻煩,請參考SQLSERVER的文檔.

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO
BEGIN TRANSACTION;
GO
select * from student with (rowlock) where id=1
waitfor delay '00:00:10'
GO
COMMIT TRANSACTION;
select * from student with (rowlock)  where id=1
GO在另一個終端上運行:
update student set name='efgh' where id=1
運行結果顯示:兩次查詢的內容將會不同. 而更新語句會等到事務結束時,纔會得到提交.
update student set name=‘efgh’ where id=4:此條更新語句會立即得到執行,因爲被鎖的行不是id=4的記錄.
如果rowlock換成TABLOCK或 HOLDLOCK,則第二條語句也會等待. TABLOCKX:是排他鎖,其他鎖的類型還有,請參考SQLSERVER文檔





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