电竞比分网-中国电竞赛事及体育赛事平台

分享

Sql表數(shù)據(jù)操作

 sumi2005 2010-09-14

Sql表數(shù)據(jù)操作

 
Sql表數(shù)據(jù)操作,閱讀Sql表數(shù)據(jù)操作,表數(shù)據(jù)操作包括數(shù)據(jù)的插入、修改和刪除。一、插入數(shù)據(jù) 在向表中添加數(shù)據(jù)時(shí)應(yīng)該注意兩點(diǎn):第一是用戶權(quán)限,只有sysadmin角包成員、數(shù)據(jù)庫和數(shù)據(jù)庫對(duì)象所有者及其授權(quán)用戶才有權(quán)限向表中添加數(shù)據(jù);第二是數(shù)據(jù)格式,對(duì)于不同的
   
表數(shù)據(jù)操作包括數(shù)據(jù)的插入、修改和刪除。
一、插入數(shù)據(jù)

在向表中添加數(shù)據(jù)時(shí)應(yīng)該注意兩點(diǎn):第一是用戶權(quán)限,只有sysadmin角包成員、數(shù)據(jù)庫和數(shù)據(jù)庫對(duì)象所有者及其授權(quán)用戶才有權(quán)限向表中添加數(shù)據(jù);第二是數(shù)據(jù)格式,對(duì)于不同的數(shù)據(jù)類型,插入數(shù)據(jù)的格式也不一樣,應(yīng)嚴(yán)格遵守它們各自的格式要求。

Transact-SQL語言中用INSERT語句向表或視圖中插入新的數(shù)據(jù)行。INSERT語句的語法格式為:

INSERT [INTO] table_source

{[column_list]

VALUES ({DEFAULT | constant_expression} [,…n])

|DEFAULT VALUES

|select_statement

|execute_statement

}

}

其中,column_list參數(shù)為新插入數(shù)據(jù)行中一列或多列列名列表,它說明INSERT 語句只為指定列插入數(shù)據(jù)。在給表或視中部分列插入數(shù)據(jù)時(shí),必須使用列名列表方式指出這部分列名。其余未指定列的列值要根據(jù)它們的默認(rèn)值和空值屬性情況而定,它們有以下幾種可能取值:

(1)對(duì)于timestamp列或具有IDENTITY屬性列,它們的列值由SQL Server計(jì)算后自動(dòng)賦值。

(2)如果這些列有默認(rèn)值或關(guān)聯(lián)有默認(rèn)數(shù)據(jù)庫對(duì)象,插入新列時(shí),它們的值為默認(rèn)值。

(3)當(dāng)這些列沒有默認(rèn)值設(shè)置時(shí),但它們?cè)试S空值時(shí),該列值為空。

(4)當(dāng)這些列既沒有默認(rèn)值設(shè)置,也不允許空值時(shí),SQL Server在執(zhí)行INSERT 語句時(shí)將產(chǎn)生錯(cuò)誤,

導(dǎo)致插入操作失敗。

當(dāng)未指定column_list 參數(shù)時(shí),為各列所提供的數(shù)據(jù)順序應(yīng)嚴(yán)格按照表中各列的定義順序,而使用column_list參數(shù)則可以調(diào)整向表中所插入數(shù)據(jù)的列順序,只要VALUES子句所提供的數(shù)據(jù)順序與column_list參數(shù)中指定的列順序相同即可。

VALUES子句為新插入行中column_list 參數(shù)所指定列提供數(shù)據(jù),這些數(shù)據(jù)可以以常量表達(dá)式形式提供,或使用DEFAULT關(guān)鍵字說明向列中插入其默認(rèn)值。

DEFAULT VALUES說明向表中所有列插入其默認(rèn)值。對(duì)于具有INDENTITY 屬性或timestamp 數(shù)據(jù)類型列,系統(tǒng)將自動(dòng)插入下一個(gè)適當(dāng)值。對(duì)于沒有設(shè)置默認(rèn)值的列,如果它們?cè)试S空值,SQL Server將插入null,否則返回一錯(cuò)誤消息。

select_statement是標(biāo)準(zhǔn)的數(shù)據(jù)庫查詢語句,它是SQL Server為INSERT語句所提供的又一種數(shù)據(jù)插入方式。INSERT語句將select_statement子句所返回的結(jié)果集合數(shù)據(jù)插入到指定表中。查詢語句結(jié)果集合每行中的數(shù)據(jù)數(shù)量、 數(shù)據(jù)類型和排列順序也必須與表中所定義列或 column_list 參數(shù)中指定列的數(shù)量、數(shù)據(jù)類型和排列順序完全相同。

SQL Server為INSERT語句提供的第四種數(shù)據(jù)插入方式是通過執(zhí)行系統(tǒng)存儲(chǔ)過程,其數(shù)據(jù)來自于過程執(zhí)行后所產(chǎn)生的結(jié)果集合。所執(zhí)行的過程可以為存儲(chǔ)過程、系統(tǒng)存儲(chǔ)過程或擴(kuò)展存儲(chǔ)過程,它們既可以為本地存儲(chǔ)過程,又可以是遠(yuǎn)程服務(wù)器上的存儲(chǔ)過程,只要用戶具有它們的執(zhí)行權(quán)限即可。有關(guān)存儲(chǔ)過程請(qǐng)參閱對(duì)應(yīng)的內(nèi)容。

table_source說明INSERT語句插入數(shù)據(jù)時(shí)所操作的表或視圖,其語法格式可簡(jiǎn)單書寫為:

{table_name [[AS] table_alias]

| view_name [[AS] table_alias]

}

table_name和view_name說明被插入數(shù)據(jù)的表或視圖名稱,table_alias參數(shù)為表或視圖設(shè)置別名。

使用別名有兩方面原因:第一、當(dāng)表或視圖名稱較長(zhǎng)時(shí),使用別名可以簡(jiǎn)化書寫工作;第二,在自連接或子查詢中,使用別名可以區(qū)別同一個(gè)表或視圖。

在向表中插入數(shù)據(jù)時(shí), 如果所插入的數(shù)據(jù)與約束或規(guī)則的要求沖突, 或是它們的數(shù)據(jù)類型不兼容時(shí),將導(dǎo)致INSERT 語句執(zhí)行失敗。當(dāng)使用SELECT或EXECUTE子句向表中一次插入多行數(shù)據(jù)時(shí),如果其中有任一行數(shù)據(jù)有誤,它將導(dǎo)致整個(gè)插入操作失敗,使SQL Server停止所有數(shù)據(jù)行的插入操作。

例一、使用數(shù)值列表方式( 假定 usertable 表中只定義了name、age和sex字段,且name、sex均為

char類型,age為int類型)。

INSERT usertable

VALUES ('張三','女',18)

例二、使用列名列表方式

INSERT usertable (age,name)

VALUES (18,'張三')

例三、在數(shù)值列表中,還可以將變量的值插入到表中。在使用變量為列提供數(shù)據(jù)時(shí),應(yīng)保證變量的數(shù)據(jù)類型與列數(shù)據(jù)類型相同,或是可以自動(dòng)將它們轉(zhuǎn)換為相同的數(shù)據(jù)類型。例如:

DECLARE @name char(16)

SET @name='張三'

INSERT usertable

VALUES (@name,DEFAULT,20)

本例中Asp中是這樣的:

dim name

name="張三"

sqlstr="INSERT usertable VALUES ('"&name&"','女',20)"

……



例四、將SELECT子句的所返回的結(jié)果集合插入到表中。例如:

INSERT usertable (name,sex,age)

SELECT 's'+name,sex,age

FROM usertable

WHERE name like '張%%'


二、修改數(shù)據(jù)

Transact-SQL中的UPDATE語句用于修改表中數(shù)據(jù),該語句的語法格式為:

UPDATE ()

SET (

column_name={expression | DEFAULT }

| @variable = expression

} [,…n]

[FROM

{

| (select_statement) [AS] table_alias [,…m]) ]

}

[,…n]

]

[WHERE



| CURRENT OF ({[GLOBAL] cursor_name } | cursor_variable_name} }

]

別看寫了一大堆,最常用的只是下列格式:

UPDATE table_name

SET column_name1=variable1,column_name2=variable2

WHERE search_conditions

其中table_or_view參數(shù)指出待修改的表或視圖名稱,其格式與INSERT語句中該參數(shù)的格式相同。

SET子句指出表中被修改的列或變量,以及它們的新值。column_name為被修改的列名,@variable為一個(gè)已經(jīng)聲明的局部變量名稱,它們修改后的值由expression表達(dá)式提供,或使用DEFAULT關(guān)鍵字將默認(rèn)值賦給指定列。

FROM子句引出另一個(gè)表,它為UPDATE語句的數(shù)據(jù)修改操作提供條件。

WHERE子句中的search_conditions 參數(shù)說明UPDATE語句的修改條件,它指出表或視圖中的哪些行需要修改。省略WHERE子句時(shí),說明對(duì)指定的表或視圖中的所有行進(jìn)行修改?。。。?br>
WHERE子句中的CURRENT OF說明在游標(biāo)的當(dāng)前位置處執(zhí)行修改操作,游標(biāo)由curror_name 或游標(biāo)變量cursor_variable_name指定。

UPDATE不能修改具有IDENTITY屬性列的列值。

例一、將usertable表中所有人員的性別改為'男'

UPDATE usertable

SET sex='男'



例二、將性別為null的所有人員的性別改成'男'

UPDATE usertable

SET sex='男'

WHERE sex IS NULL

例三、將所有姓名為null的人員的姓名改為'張三'、性別改為'女',年齡改為18

UPDATE usertable

SET name='張三',sex='女',age=18

WHERE name IS NULL


三、刪除數(shù)據(jù)

Transact-SQL中,DELETE和TRUNCATE TABLE語句均可以刪除表中的數(shù)據(jù)。DELETE語句的語法格式為:

DELETE

{table_name | view_name}

FROM

{



| (select_statement) [AS] table_alias [(column_alias [,…m])]

}[,…n]

[WHERE

{

|{ [CURRENT OF {{[global] cursor_name}

|cursor_variable_name

}



DELETE語句的結(jié)構(gòu)與UPDATE語句有些類似,其中也包含F(xiàn)ROM子句和WHERE子句。WHERE子句為數(shù)據(jù)刪

除指定條件。不使用WHERE子句時(shí),DELETE語句將把有或視圖中所有的數(shù)據(jù)刪除。FROM子句是Transact-SQL在ANSI基礎(chǔ)上對(duì)DELETE語句的擴(kuò)展,它指定要連接的表名,提供與相關(guān)子查詢相似的功能。

TRUNCATE TABLE語句語法格式為:

TRUNCATE TABLE table_name

TRUNCATE TABLE語句刪除指定表中的所有數(shù)據(jù)行,但表結(jié)構(gòu)及其所有索引繼續(xù)保留,為該表所定義約束、規(guī)則、默認(rèn)和觸發(fā)器仍然有效。如果所刪除表中包含有IDENTITY列,則該列將被復(fù)位到其原始基值。使用不帶WHERE子句的DELETE語句也可以刪除表中所有行,但它不復(fù)位IDENTITY列。

與DELETE語句相比,TRUNCATE TABLE語句的刪除速度更快。因?yàn)镈ELETE語句在每刪除一行時(shí)都要把刪除操作記錄到日志中,而TRUNCATE TABLE語句則是通過釋放表數(shù)據(jù)頁面的方法來刪除表中數(shù)據(jù),它只在釋放頁面做一次事務(wù)日志記錄。所以使用TRUNCATE TABLE語句刪除數(shù)據(jù)后,這些行是不可恢復(fù)的,而DELETE操作則可回滾,能夠恢復(fù)原來數(shù)據(jù)。

因?yàn)門RUNCATE TABLE語句不做操作日志,它不能激活觸發(fā)器,所以TRUNCATE TABLE語句不能刪除一個(gè)被其它表通過FOREIGN KEY約束所參照的表。

例一、使用DELETE語句刪除usertable表中name為'張三'的數(shù)據(jù)行

DELETE usertable

WHERE name='張三'



例二、下面使用FROM子句和WHERE子句指定條件,然后從TB_update表中刪除數(shù)據(jù)

DELETE TB_update

FROM TB_constraint AS a,TB_update AS b

WHERE a.name=b.name

AND a.country='China'



DELETE TB_update

FROM (SELECT * FROM TB_constraint

WHERE country='USA') AS a

WHERE a.name=TB_update.name

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多