資料庫快照,自定義函式與計算列的概念

2022-04-07 18:02:35 字數 1743 閱讀 7598

1.資料庫快照

資料庫快照可以理解為儲存某個資料庫在快照那一瞬間的狀態。快照和備份原理有所差異,但是功能有一點相同那就是可以將資料還原為備份的那個時刻.快照的原理是新建乙個資料庫指標,在原資料庫沒有變化的情況下快照是不占用空間的,而資料庫發生了變化,那麼在變化前,被修改的資料頁會先複製乙份到快照檔案中,然後再對原資料頁進行修改.顯然這樣做的好處就是比備份資料庫占用空間小.快照是唯讀的,大家也可以直接在sql語句中把他當資料庫用:

use snap1;--使用快照

select * from table1

與此同時也可以實現資料還原功能,在匯入資料的時候把資料來源選成快照就可以了。

快照的建立似乎不可以在managementstudio通過點滑鼠完成,只有通過sql語句來做,如下例:

create database snap2

on( name= db1,

filename= c:abc.mdf)

as snapshot of db1

這兒snap2當然就是快照名,而name=db1這兒的db1是指要被快照的資料庫的資料檔案邏輯名稱.

乙個資料庫的邏輯名稱可以通過右鍵某資料庫->屬性,"檔案"選項卡中可以看到.

filename=...這是指快照檔案放在哪個位置.最後那個db1就是指要被快照的資料庫了.

注意:資料庫被快照以後是無法刪除的.要刪除資料庫必須先把該資料庫的所有快照刪除.

2.自定義函式

在資料庫->可程式設計性->函式->標量值函式中可以定義使用者自己的函式.

右鍵"新建標量值函式"後會呼叫新建函式的模版,按ctrl+shift+m可以為模版中各引數賦值.然後在begin end中間寫入自己的sql語句.

比如我們有乙個通過生日計算年齡的函式getage();以下是寫出來的**:

create function [dbo].[getage]

( @birthday datetime

)returns int

asbegin

declare @result int

declare @now datetime

set @now=getdate();

select @result= datediff(yy,@birthday,@now)

return @result

end在編寫完**後,我們直接按f5執行就可以將編寫的函式儲存到資料庫中.呼叫自定義函式也很簡單,和一般的函式用法一樣不過就是前面必須跟架構名,也就是說要寫成dbo.getage,而不能直接寫getage。

下面讓我們新建乙個查詢來測試一下:

select dbo.getage(1984/10/10)

返回22,函式編寫成功。

3.計算列

大家需要了解的是,在資料庫表設計的時候,有乙個比較特殊的列不填寫任何設計型別,使用者不可以改變該列的值,它就是計算列。

計算列的值是通過一定的函式公式等以另乙個或多個列的值為輸入值,計算出結果。

開啟表或在新建表的時候,在列屬性下面就有"計算所得的列規範"項,在"公式"中填入需要的公式便完成計算列的設計.

比如我們有乙個表,表中有字段birthday(datetime型別),那麼我們再新建乙個列為age,在公式中填入(isnull([dbo].[getage]([birthday]),(0)))然後儲存便可以了。這個時候開啟表中資料就可以看到age欄位已經全部顯示出來了.

注:在計算列中是不能直接寫比較複雜的邏輯的,一般需要結合自定義函式和計算列,這樣就可以完成各種複雜的邏輯了。

SQLserver 資料庫自定義函式

最近專案開發上使用的sqlserver資料庫是2008版本,由於08版本的資料是沒有字串合併 string agg 這個函式 2017版本及以上支援 的,只有用stuff for xml path 來達到效果。所以才有萌生出了自定義聚合函式的想法。第一步新建專案 2008版本選擇 檔案 新建 專案 ...

自定義mysql資料庫函式 資料庫自定義函式

這個為通用過濾關鍵字的函式,若有其他關鍵字未新增可以參考語法加入。use db go object userdefinedfunction dbo f filterstring script date 12 09 2013 17 03 45 set ansi nulls on go set quot...

資料庫表的某列的自定義自增函式(mysql)

1 在該列上建立唯一值約束 表名 約束名 列名,都不帶引號 alter table 表名 add constraint 約束名 unique 列名 2 根據字段值要求 比如 年份後兩位 兩位月份 兩位天 當天的第幾條記錄 5位數,不足在左側補零 寫乙個自增函式。dbname01 資料庫名 gener...