資料庫修改資料

iSQlServer發表於2010-09-07

1.插入資料

isnert的命令形式:

insert/values,insert/select,insert/exec,insert/defalut,select/into.

insert/select:

eg:

insert into table_name(First,Second)

select id,pwd from table_name1

使用該格式,主要的是要選擇正確的資料集,一般在使用select時先測試資料集的結果

insert/exec插入儲存過程返回的資料,並將其插入到表中。插入列的順序必須與儲存過程結果集的列順序相同,以下是基本語法:

insert into owner.table[columns]

exec storedprocedure parameters

注意儲存過程可能返回多個結果集,在這種情況下,insert命令試圖插入每個結果集中的資料,因此必須保證每個結果集的列順序與插入列的書序一致。

eg:

create procedure pro_test

as

select * from dt_1 where id<3

select 8 from dt_2 where id>7

//接下來使用儲存過程

insert into dt_1[columns]

exec pro_test

建立由預設值組成的行:

eg:

insert into dt_name default values

插入資料時建立表:

select命令的一種變體。

在select語句中使用into選項將建立一個新表包含select結果集

eg:

select colomns

into NewTable

from DataSource

where[condition]

例子:

select *

into dt_new

from dt_old[order by ... asc,desc]

更新資料:

update每次能夠更新多行,但是每次只能更新一個表。set關鍵字用於修改表中任何列的值,新值可以使硬編碼的字串面量、變數、表示式,還可以使sql update語句中from子句引用的資料來源的列。

進行全程搜尋和替換:

update dt_1

set id=replace(id,'23','22222')

即可將id位123456更新為122222456

更新資料表時引用多個表:

sql update:可以使用表示式給列賦值。該表示式可以引用同一列、其他列甚至其他表

這個過程比較複雜一點:

1.檢查可用的資料2.測試公式3.執行更新

 

刪除資料:

delete from dt_name

where ...

注意:級聯刪除

delete from dt_name

...

on delete cascade

 

返回修改後的資料:

sql server2005能夠以資料集的方式返回修改後的資料,並供以後使用。使用output子句可以訪問插入和刪除的虛擬表

 

對資料修改的潛在限制:

主鍵限制:如果一個表中有主鍵  並且主鍵有限制的話,可以使用一下語句來破除這種限制。

set identity_insert table_name on

//

insert into table_name(id,pwd)//注意這裡的列名一定要加上

value(1,2)

如果想恢復限制,可以set identity_insert table_name off

並且值得注意的是:我們在一個資料庫中同一時刻只能有一個表可以將它設定為on。

 

@@identity可以返回插入行的標誌值,scope_identity()功能同上,ident_current(table)

外來鍵限制:

首先說說什麼是外來鍵:

成績表中的學號不是成績表的主鍵,但它和學生表中的學號相對應,並且學生表中的學號是學生表的主鍵,則稱成績表中的學號是學生表的外來鍵 

例如:

如果dt_test1(id,name) dt_test2(UserName,pwd)這兩個表中的主鍵分別是id和UserName,dt_test1中的name是dt_test2的外來鍵的話,那麼插入dt_test1中的name的值就會有所限制,插入的值必須在dt_test2中出現過才行。

外來鍵限制是一種很普遍的現象,比如:

insert into dt_test1 values(..),在dt_test2中如果沒有相應的值會出現錯誤,如果在刪除dt_test2中的某行時,檢測到在dt_test1中有用到相應的值,那麼也會發生錯誤。

 

唯一索引限制:

空值和預設值限制:

check約束限制:

首先為表dt_test1新增一個check約束

alter table dt_test1

add constraint test_ct

check(id>1000)

此時,如果再向其中新增id<1000的資料行則會發生錯誤。

 

instead of 觸發器限制:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-672875/,如需轉載,請註明出處,否則將追究法律責任。

相關文章