當前位置:首頁 » 編程語言 » sql定義的操作
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql定義的操作

發布時間: 2022-12-27 16:20:17

A. sql是什麼意思

結構化查詢語言(Structured Query Language)簡稱SQL,是一種特殊目的的編程語言,是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統。

SQL是高級的非過程化編程語言,允許用戶在高層數據結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同資料庫系統,可以使用相同的結構化查詢語言作為數據輸入與管理的介面。

SQL具有數據定義、數據操縱、和數據控制的功能。

1、SQL數據定義功能:能夠定義資料庫的三級模式結構,即外模式、全局模式和內模式結構。在SQL中,外模式又叫做視圖(View),全局模式簡稱模式(Schema),內模式由系統根據資料庫模式自動實現,一般無需用戶過問。

2、SQL數據操縱功能:包括對基本表和視圖的數據插入、刪除和修改,特別是具有很強的數據查詢功能。

3、SQL的數據控制功能:主要是對用戶的訪問許可權加以控制,以保證系統的安全性。

以上內容參考:網路-結構化查詢語言

B. 1. SQL的基本操作指令有哪些至少舉出5個

列舉幾個吧
1、顯示當前資料庫伺服器中的資料庫列表:mysql>
SHOW
DATABASES;
2、建立資料庫:mysql>
CREATE
DATABASE
庫名;
3、建立數據表:mysql>
USE
庫名;mysql>
CREATE
TABLE
表名
(欄位名
VARCHAR(20),
欄位名
CHAR(1));
4、刪除資料庫:mysql>
DROP
DATABASE
庫名;
5、刪除數據表:mysql>
DROP
TABLE
表名;
6、將表中記錄清空:mysql>
DELETE
FROM
表名;
7、往表中插入記錄:mysql>
INSERT
INTO
表名
VALUES
("hyq","M");
8、更新表中數據:mysql->
UPDATE
表名
SET
欄位名1='a',欄位名2='b'
WHERE
欄位名3='c';
9、用文本方式將數據裝入數據表中:mysql>
load
data
local
infile
"d:/mysql.txt"
into
table
表名;
10、導入.sql文件命令:mysql>
USE
資料庫名;mysql>
source
d:/mysql.sql;

C. SQL語言的數據定義功能

SQL 語言分為DDL,DML,DCL 三種 資料庫操作語言,資料庫定義語言,資料庫控制語言.感覺應該是回答定義資料庫①、定義基本表②、定義視圖③和定義索引)④ 這個

D. SQL簡介及其分類

SQL ( Structured Query Language,結構化查詢語言,簡稱 SQL )是用於訪問和處理資料庫的標準的計算機語言。 一門操作關系型資料庫的編程語言,定義操作所有關系型資料庫的統一標准。

通用語法

SQL 語句既可以單行書寫也可以多行書寫, 以分號結尾

大小寫不敏感,但關鍵字建議使用大寫。

注釋: 單行注釋: -- 注釋內容(--後面一定要加空格) (MySQL下也可以用#注釋內容)

多行注釋: /* 注釋 */

SQL分類

DDL(Data Definition Language) : 數據定義語言,用來定義資料庫對象:資料庫,表,列等

DML(Data Manipulation Language) 數據操作語言,用來對資料庫中表的數據進行增刪改

DQL(Data Query Language) 數據查詢語言,用來查詢資料庫中表的記錄(數據)

DCL(Data Control Language) 數據控制語言,用來定義資料庫的訪問許可權和安全級別,及創建用戶

查詢所有的資料庫

創建資料庫

刪除資料庫

使用資料庫

資料庫創建好後,要在資料庫中創建表,得先明確在哪兒個資料庫中操作,此時就需要使用資料庫。

查看當前使用的資料庫

操作表也就是對表進行增(Create)刪(Retrieve)改(Update)查(Delete)。

查詢當前資料庫下所有表名稱

查詢表結構

創建表

MySQL 支持多種類型,可以分為三類:

刪除表

刪除表時判斷表是否存在

修改表名

添加一列

修改數據類型

修改列名和數據類型

刪除列

對數據進行增(insert)刪(delete)改(update)操作。

給指定列添加數據

給全部列添加數據

批量添加數據

修改表數據

刪除數據

E. SQL的基本操作

1、說明:創建資料庫

CREATE DATABASE database-name

2、說明:刪除資料庫

drop database dbname

3、說明:備份sql server

--- 創建 備份數據的 device

USE master

EXEC sp_admpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'

--- 開始 備份

BACKUP DATABASE pubs TO testBack

4、說明:創建新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

根據已有的表創建新表:

A:create table tab_new like tab_old (使用舊表創建新表)

B:create table tab_new as select col1,col2… from tab_old definition only

5、說明:

刪除新表:drop table tabname

6、說明:

增加一個列:Alter table tabname add column col type

註:列增加後將不能刪除。DB2中列加上後數據類型也不能改變,唯一能改變的是增加varchar類型的長度。

7、說明:

添加主鍵:Alter table tabname add primary key(col)

說明:

刪除主鍵:Alter table tabname drop primary key(col)

8、說明:

創建索引:create [unique] index idxname on tabname(col….)

刪除索引:drop index idxname

註:索引是不可更改的,想更改必須刪除重新建。

9、說明:

創建視圖:create view viewname as select statement

刪除視圖:drop view viewname

10、說明:幾個簡單的基本的sql語句

選擇:select * from table1 where 范圍

插入:insert into table1(field1,field2) values(value1,value2)

刪除:delete from table1 where 范圍

更新:update table1 set field1=value1 where 范圍

查找:select * from table1 where field1 like 』%value1%』 ---like的語法很精妙,查資料!

排序:select * from table1 order by field1,field2 [desc]

總數:select count * as totalcount from table1

求和:select sum(field1) as sumvalue from table1

平均:select avg(field1) as avgvalue from table1

最大:select max(field1) as maxvalue from table1

最小:select min(field1) as minvalue from table1

11、說明:幾個高級查詢運算詞

A: UNION 運算符

UNION 運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)並消去表中任何重復行而派生出一個結果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。

B: EXCEPT 運算符

EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行並消除所有重復行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復行。

C: INTERSECT 運算符

INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行並消除所有重復行而派生出一個結果表。當 ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復行。

註:使用運算詞的幾個查詢結果行必須是一致的。

12、說明:使用外連接

A、left outer join:

左外連接(左連接):結果集幾包括連接表的匹配行,也包括左連接表的所有行。

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

B:right outer join:

右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。

C:full outer join:

全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。

其次,大家來看一些不錯的sql語句

1、說明:復製表(只復制結構,源表名:a 新表名:b) (Access可用)

法一:select * into b from a where 1<>1

法二:select top 0 * into b from a

2、說明:拷貝表(拷貝數據,源表名:a 目標表名:b) (Access可用)

insert into b(a, b, c) select d,e,f from b;

3、說明:跨資料庫之間表的拷貝(具體數據使用絕對路徑) (Access可用)

insert into b(a, b, c) select d,e,f from b in 『具體資料庫』 where 條件

例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..

4、說明:子查詢(表名1:a 表名2:b)

select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)

5、說明:顯示文章、提交人和最後回復時間

select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

6、說明:外連接查詢(表名1:a 表名2:b)

select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

7、說明:在線視圖查詢(表名1:a )

select * from (SELECT a,b,c FROM a) T where t.a > 1;

8、說明:between的用法,between限制查詢數據范圍時包括了邊界值,not between不包括

select * from table1 where time between time1 and time2

select a,b,c, from table1 where a not between 數值1 and 數值2

9、說明:in 的使用方法

select * from table1 where a [not] in (『值1』,』值2』,』值4』,』值6』)

10、說明:兩張關聯表,刪除主表中已經在副表中沒有的信息

delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

11、說明:四表聯查問題:

select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

12、說明:日程安排提前五分鍾提醒

SQL: select * from 日程安排 where datediff('minute',f開始時間,getdate())>5

13、說明:一條sql 語句搞定資料庫分頁

select top 10 b.* from (select top 20 主鍵欄位,排序欄位 from 表名 order by 排序欄位 desc) a,表名 b where b.主鍵欄位 = a.主鍵欄位 order by a.排序欄位

14、說明:前10條記錄

select top 10 * form table1 where 范圍

15、說明:選擇在每一組b值相同的數據中對應的a最大的記錄的所有信息(類似這樣的用法可以用於論壇每月排行榜,每月熱銷產品分析,按科目成績排名,等等.)

select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

16、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行並消除所有重復行而派生出一個結果表

(select a from tableA ) except (select a from tableB) except (select a from tableC)

17、說明:隨機取出10條數據

select top 10 * from tablename order by newid()

18、說明:隨機選擇記錄

select newid()

19、說明:刪除重復記錄

Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

20、說明:列出資料庫里所有的表名

select name from sysobjects where type='U'

21、說明:列出表裡的所有的

select name from syscolumns where id=object_id('TableName')

22、說明:列示type、vender、pcs欄位,以type欄位排列,case可以方便地實現多重選擇,類似select 中的case。

select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type

顯示結果:

type vender pcs

電腦 A 1

電腦 A 1

光碟 B 2

光碟 A 2

手機 B 3

手機 C 3

23、說明:初始化表table1

TRUNCATE TABLE table1

24、說明:選擇從10到15的記錄

select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc

隨機選擇資料庫記錄的方法(使用Randomize函數,通過SQL語句實現)

存儲在資料庫中的數據來說,隨機數特性能給出上面的效果,但它們可能太慢了些。你不能要求ASP「找個隨機數」然後列印出來。實際上常見的解決方案是建立如下所示的循環:

Randomize

RNumber = Int(Rnd*499) +1

While Not objRec.EOF

If objRec("ID") = RNumber THEN

... 這里是執行腳本 ...

end if

objRec.MoveNext

Wend

這很容易理解。首先,你取出1到500范圍之內的一個隨機數(假設500就是資料庫內記錄的總數)。然後,你遍歷每一記錄來測試ID 的值、檢查其是否匹配RNumber。滿足條件的話就執行由THEN 關鍵字開始的那一塊代碼。假如你的RNumber 等於495,那麼要循環一遍資料庫花的時間可就長了。雖然500這個數字看起來大了些,但相比更為穩固的企業解決方案這還是個小型資料庫了,後者通常在一個資料庫內就包含了成千上萬條記錄。這時候不就死定了?

採用SQL,你就可以很快地找出准確的記錄並且打開一個只包含該記錄的recordset,如下所示:

Randomize

RNumber = Int(Rnd*499) + 1

SQL = "SELECT * FROM Customers WHERE ID = " & RNumber

set objRec = ObjConn.Execute(SQL)

Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")

不必寫出RNumber 和ID,你只需要檢查匹配情況即可。只要你對以上代碼的工作滿意,你自可按需操作「隨機」記錄。Recordset沒有包含其他內容,因此你很快就能找到你需要的記錄這樣就大大降低了處理時間。

再談隨機數

現在你下定決心要榨乾Random 函數的最後一滴油,那麼你可能會一次取出多條隨機記錄或者想採用一定隨機范圍內的記錄。把上面的標准Random 示例擴展一下就可以用SQL應對上面兩種情況了。

為了取出幾條隨機選擇的記錄並存放在同一recordset內,你可以存儲三個隨機數,然後查詢資料庫獲得匹配這些數字的記錄:

SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3

假如你想選出10條記錄(也許是每次頁面裝載時的10條鏈接的列表),你可以用BETWEEN 或者數學等式選出第一條記錄和適當數量的遞增記錄。這一操作可以通過好幾種方式來完成,但是 SELECT 語句只顯示一種可能(這里的ID 是自動生成的號碼):

SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"

注意:以上代碼的執行目的不是檢查資料庫內是否有9條並發記錄。

隨機讀取若干條記錄,測試過

Access語法:SELECT top 10 * From 表名 ORDER BY Rnd(id)

Sql server:select top n * from 表名 order by newid()

mysql select * From 表名 Order By rand() Limit n

Access左連接語法(最近開發要用左連接,Access幫助什麼都沒有,網上沒有Access的SQL說明,只有自己測試, 現在記下以備後查)

語法 select table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...

使用SQL語句 用...代替過長的字元串顯示

語法:

SQL資料庫:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename

Access資料庫:SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename;

Conn.Execute說明

Execute方法

該方法用於執行SQL語句。根據SQL語句執行後是否返回記錄集,該方法的使用格式分為以下兩種:

1.執行SQL查詢語句時,將返回查詢得到的記錄集。用法為:

Set 對象變數名=連接對象.Execute("SQL 查詢語言")

Execute方法調用後,會自動創建記錄集對象,並將查詢結果存儲在該記錄對象中,通過Set方法,將記錄集賦給指定的對象保存,以後對象變數就代表了該記錄集對象。

2.執行SQL的操作性語言時,沒有記錄集的返回。此時用法為:

連接對象.Execute "SQL 操作性語句" [, RecordAffected][, Option]

•RecordAffected 為可選項,此出可放置一個變數,SQL語句執行後,所生效的記錄數會自動保存到該變數中。通過訪問該變數,就可知道SQL語句隊多少條記錄進行了操作。

•Option 可選項,該參數的取值通常為adCMDText,它用於告訴ADO,應該將Execute方法之後的第一個字元解釋為命令文本。通過指定該參數,可使執行更高效。

•BeginTrans、RollbackTrans、CommitTrans方法

這三個方法是連接對象提供的用於事務處理的方法。BeginTrans用於開始一個事物;RollbackTrans用於回滾事務;CommitTrans用於提交所有的事務處理結果,即確認事務的處理。

事務處理可以將一組操作視為一個整體,只有全部語句都成功執行後,事務處理才算成功;若其中有一個語句執行失敗,則整個處理就算失敗,並恢復到處里前的狀態。

BeginTrans和CommitTrans用於標記事務的開始和結束,在這兩個之間的語句,就是作為事務處理的語句。判斷事務處理是否成功,可通過連接對象的Error集合來實現,若Error集合的成員個數不為0,則說明有錯誤發生,事務處理失敗。Error集合中的每一個Error對象,代表一個錯誤信息。

資料引用:http://www.knowsky.com/398670.html

F. 使用SQL語言完成下列操作

Create Table Employee
(Employeeid char(10) nut null
Name char()
Departmentld char()
);
create view View1 ()
as
select Employeeid ,Nmae, Departmentid
from Employee

第一個表和第一個試圖應該是這樣吧,剩下的樓主就照貓畫虎吧

G. SQL的定義功能是什麼

SQL全稱是「結構化查詢語言(Structured
Query
Language)」,最早的是IBM的聖約瑟研究實驗室為其關系資料庫管理系統SYSTEM
R開發的一種查詢語言,它的前身是SQUARE語言。SQL語言結構簡潔,功能強大,簡單易學,所以自從IBM公司1981年推出以來,SQL語言,得到了廣泛的應用。如今無論是像Oracle
,Sybase,Informix,SQL
server這些大型的資料庫管理系統,還是像Visual
Foxporo,PowerBuilder這些微機上常用的資料庫開發系統,都支持SQL語言作為查詢語言。

H. 試述SQL的定義功能

就是SQL的數據定義語句DDL嘛
創建修改和刪除表、視圖等等的

I. SQL資料庫的操作

SQL包括了所有對資料庫的操作,主要是由4個部分組成:
1.數據定義:這一部分又稱為「SQL DDL」,定義資料庫的邏輯結構,包括定義資料庫、基本表、視圖和索引4部分。
2.數據操縱:這一部分又稱為「SQL DML」,其中包括數據查詢和數據更新兩大類操作,其中數據更新又包括插入、刪除和更新三種操作。
3.數據控制:對用戶訪問數據的控制有基本表和視圖的授權、完整性規則的描述,事務控制語句等。
4.嵌入式SQL語言的使用規定:規定SQL語句在宿主語言的程序中使用的規則。
下面我們將分別介紹: SQL數據定義功能包括定義資料庫、基本表、索引和視圖。
首先,讓我們了解一下SQL所提供的基本數據類型:(如^00100009b^)
1.資料庫的建立與刪除
(1)建立資料庫:資料庫是一個包括了多個基本表的數據集,其語句格式為:
CREATE DATABASE <資料庫名> 〔其它參數〕
其中,<資料庫名>在系統中必須是唯一的,不能重復,不然將導致數據存取失誤。〔其它參數〕因具體資料庫實現系統不同而異。
例:要建立項目管理資料庫(xmmanage),其語句應為:
CREATE DATABASE xmmanage
(2)資料庫的刪除:將資料庫及其全部內容從系統中刪除。
其語句格式為:DROP DATABASE <資料庫名>
例:刪除項目管理資料庫(xmmanage),其語句應為: DROP DATABASE xmmanage
2.基本表的定義及變更
本身獨立存在的表稱為基本表,在SQL語言中一個關系唯一對應一個基本表。基本表的定義指建立基本關系模式,而變更則是指對資料庫中已存在的基本表進行刪除與修改。 SQL是一種查詢功能很強的語言,只要是資料庫存在的數據,總能通過適當的方法將它從資料庫中查找出來。SQL中的查詢語句只有一個:SELECT,它可與其它語句配合完成所有的查詢功能。SELECT語句的完整語法,可以有6個子句。完整的語法如下:SELECT 目標表的列名或列表達式集合FROM 基本表或(和)視圖集合〔WHERE條件表達式〕〔GROUP BY列名集合〔HAVING組條件表達式〕〕〔ORDER BY列名〔集合〕…〕
簡單查詢,使用TOP子句
查詢結果排序order by
帶條件的查詢where,使用算術表達式,使用邏輯表達式,使用between關鍵字,使用in關鍵字,
模糊查詢like
整個語句的語義如下:從FROM子句中列出的表中,選擇滿足WHERE子句中給出的條件表達式的元組,然後按GROUPBY子句(分組子句)中指定列的值分組,再提取滿足HAVING子句中組條件表達式的那些組,按SELECT子句給出的列名或列表達式求值輸出。ORDER子句(排序子句)是對輸出的目標表進行重新排序,並可附加說明ASC(升序)或DESC(降序)排列。在WHERE子句中的條件表達式F中可出現下列操作符和運算函數:算術比較運算符:<,<=,>,>=,=,<>。邏輯運算符:AND,OR,NOT。集合運算符:UNION(並),INTERSECT(交),EXCEPT(差)。集合成員資格運算符:IN,NOT IN謂詞:EXISTS(存在量詞),ALL,SOME,UNIQUE。聚合函數:AVG(平均值),MIN(最小值),MAX(最大值),SUM(和),COUNT(計數)。F中運算對象還可以是另一個SELECT語句,即SELECT語句可以嵌套。上面只是列出了WHERE子句中可出現的幾種主要操作,由於WHERE子句中的條件表達式可以很復雜,因此SELECT句型能表達的語義遠比其數學原形要復雜得多。下面,我們以上面所建立的三個基本表為例,演示一下SELECT的應用:1.無條件查詢例:找出所有學生的的選課情況SELECT st_no,su_noFROM score例:找出所有學生的情況SELECT*FROM student「*」為通配符,表示查找FROM中所指出關系的所有屬性的值。2.條件查詢條件查詢即帶有WHERE子句的查詢,所要查詢的對象必須滿足WHERE子句給出的條件。例:找出任何一門課成績在70以上的學生情況、課號及分數SELECT UNIQUE student.st_class,student.st_no,student.st_name,student.st_sex,student.st_age,score.su_no,score.scoreFROM student,scoreWHERE score.score>=70 AND score.stno=student,st_no這里使用UNIQUE是不從查詢結果集中去掉重復行,如果使用DISTINCT則會去掉重復行。另外邏輯運算符的優先順序為NOT→AND→OR。例:找出課程號為c02的,考試成績不及格的學生SELECT st_noFROM scoreWHERE su_no=『c02』AND score<603.排序查詢排序查詢是指將查詢結果按指定屬性的升序(ASC)或降序(DESC)排列,由ORDER BY子句指明。例:查找不及格的課程,並將結果按課程號從大到小排列SELECT UNIQUE su_noFROM scoreWHERE score<60ORDER BY su_no DESC4.嵌套查詢嵌套查詢是指WHERE子句中又包含SELECT子句,它用於較復雜的跨多個基本表查詢的情況。例:查找課程編號為c03且課程成績在80分以上的學生的學號、姓名SELECT st_no,st_nameFROM studentWHERE stno IN (SELECT st_noFROM scoreWHERE su_no=『c03』 AND score>80 )這里需要明確的是:當查詢涉及多個基本表時用嵌套查詢逐次求解層次分明,具有結構程序設計特點。在嵌套查詢中,IN是常用到的謂詞。若用戶能確切知道內層查詢返回的是單值,那麼也可用算術比較運算符表示用戶的要求。5.計算查詢計算查詢是指通過系統提供的特定函數(聚合函數)在語句中的直接使用而獲得某些只有經過計算才能得到的結果。常用的函數有:COUNT(*) 計算元組的個數COUNT(列名) 對某一列中的值計算個數SUM(列名) 求某一列值的總和(此列值是數值型)AVG(列名) 求某一列值的平均值(此列值是數值型)MAX(列名) 求某一列值中的最大值MIN(列名) 求某一列值中的最小值例:求男學生的總人數和平均年齡SELECT COUNT(*),AVG(st_age)FROM studentWHERE st_sex=『男』例:統計選修了課程的學生的人數SELECT COUNT(DISTINCT st_no)FROM score注意:這里一定要加入DISTINCT,因為有的學生可能選修了多門課程,但統計時只能按1人統計,所以要使用DISTINCT進行過濾。 由於資料庫管理系統是一個多用戶系統,為了控制用戶對數據的存取權利,保持數據的共享及完全性,SQL語言提供了一系列的數據控制功能。其中,主要包括安全性控制、完整性控制、事務控制和並發控制。1.安全性控制數據的安全性是指保護資料庫,以防非法使用造成數據泄露和破壞。保證數據安全性的主要方法是通過對資料庫存取權力的控制來防止非法使用資料庫中的數據。即限定不同用戶操作不同的數據對象的許可權。存取權控制包括權力的授予、檢查和撤消。權力授予和撤消命令由資料庫管理員或特定應用人員使用。系統在對資料庫操作前,先核實相應用戶是否有權在相應數據上進行所要求的操作。(1)權力授予:權力授有資料庫管理員專用的授權和用戶可用的授權兩種形式。資料庫管理員專用授權命令格式如下:|CONNECT |GRANT|RESOURCE|TO 用戶名〔IDENTIFED BY 口令〕|DBA |其中,CONNECT表示資料庫管理員允許指定的用戶具有連接到資料庫的權力,這種授權是針對新用戶;RESOURCE表示允許用戶建立自己的新關系模式,用戶獲得CONNECT權力後,必須獲得RESOURCE權力才能創建自己的新表;DBA表示資料庫管理員將自己的特權授予指定的用戶。若要同時授予某用戶上述三種授權中的多種權力,則必須通過三個相應的GRANT命令指定。另外,具有CONNECT和RESOURCE授權的用戶可以建立自己的表,並在自己建立的表和視圖上具有查詢、插入、修改和刪除的權力。但通常不能使用其他用戶的關系,除非能獲得其他用戶轉授給他的相應權力。例:若允許用戶SSE連接到資料庫並可以建立他自己的關系,則可通過如下命令授予權力:GRANT CONNECT TO SSE INENTIFIED BY BD1928GRANT RESOURCE TO SSE用戶可用的授權是指用戶將自己擁有的部分或全部權力轉授給其他用戶的命令形式,其命令格式如下:|SELECT ||INSERT ||DELETE |GRANT|UPDATE(列名1[,列名2]…)|ON|表名 |TO|用戶名|〔WITH GRANT OPTION〕|ALTER | |視圖名| |PUBLIC||NDEX ||ALL |若對某一用戶同時授予多種操作權力,則操作命令符號可用「,」相隔。PUBLIC 表示將權力授予資料庫的所有用戶,使用時要注意:任選項WITH GRANT OPTION表示接到授權的用戶,具有將其所得到的同時權力再轉授給其他用戶權力。例:如果將表student的查詢權授予所有用戶,可使用以下命令:GRANT SELECT ON student TO PUBLIC例:若將表subject的插入及修改權力授予用戶SSE並使得他具有將這種權力轉授他人的權力,則可使用以下命令:GRANT INSERT,UPDATE(su_subject) ON subject TO SSE WITH GRANT OPTION這里,UPDATE後面跟su_subject是指出其所能修改的列。(2)權力回收:權力回收是指回收指定用戶原已授予的某些權力。與權力授予命令相匹配,權力回收也有資料庫管理員專用和用戶可用的兩種形式。DBA專用的權力回收命令格式為:|CONNECT |REVOKE|RESOURCE|FROM用戶名|DBA |用戶可用的權力回收命令格式為:|SELECT ||INSERT ||DELETE |REVOKE|UPDATE(列名1〔,列名2〕…) |ON|表名 |FROM |用戶名||ALTER | |視圖名| |PUBLIC||INDEX ||ALL |例:回收用戶SSE的DBA權力:REVOKE DBA FROM SSE2.完整性控制資料庫的完整性是指數據的正確性和相容性,這是資料庫理論中的重要概念。完整性控制的主要目的是防止語義上不正確的數據進入資料庫。關系系統中的完整性約束條件包括實體完整性、參照完整性和用戶定義完整性。而完整性約束條件的定義主要是通過CREATE TABLE語句中的〔CHECK〕子句來完成。另外,還有一些輔助命令可以進行數據完整性保護。如UNIQUE和NOT NULL,前者用於防止重復值進入資料庫,後者用於防止空值。3.事務控制事務是並發控制的基本單位,也是恢復的基本單位。在SQL中支持事務的概念。所謂事務,是用戶定義的一個操作序列(集合),這些操作要麼都做,要麼一個都不做,是一個不可分割的整體。一個事務通常以BEGIN TRANSACTION開始,以COMMIT或ROLLBACK結束。SQL提供了事務提交和事務撤消兩種命令:(1)事務提交:事務提交的命令為:COMMIT 〔WORK〕事務提交標志著對資料庫的某種應用操作成功地完成,所有對資料庫的操作都必須作為事務提交給系統時才有效。事務一經提交就不能撤消。(2)事務撤消:事務撤消的命令是:ROLLBACK 〔WORK〕事務撤消標志著相應事務對資料庫操作失敗,因而要撤消對資料庫的改變,即要「回滾」到相應事務開始時的狀態。當系統非正常結束時(如掉電、系統死機),將自動執行ROLLBACK命令

J. SQL資料庫的角色的定義,分類及角色的許可權分配操作

角色是一個強大的工具,使您得以將用戶集中到一個單元中,然後對該單元應用許可權。對一個角色授予、拒絕或廢除的許可權也適用於該角色的任何成員。可以建立一個角色來代表單位中一類工作人員所執行的工作,然後給這個角色授予適當的許可權。當工作人員開始工作時,只須將他們添加為該角色成員,當他們離開工作時,將他們從該角色中刪除。而不必在每個人接受或離開工作時,反復授予、拒絕和廢除其許可權。許可權在用戶成為角色成員時自動生效。

Microsoft® Windows NT® 和 Windows® 2000 組的使用方式與角色很相似。有關更多信息,請參見組。

如果根據工作職能定義了一系列角色,並給每個角色指派了適合這項工作的許可權,則很容易在資料庫中管理這些許可權。之後,不用管理各個用戶的許可權,而只須在角色之間移動用戶即可。如果工作職能發生改變,則只須更改一次角色的許可權,並使更改自動應用於角色的所有成員,操作比較容易。

在 Microsoft® SQL Server™ 2000 和 SQL Server 7.0 版中,用戶可屬於多個角色。

以下腳本說明登錄、用戶和角色的添加,並為角色授予許可權。

USE master

GO

sp_grantlogin 'NETDOMAIN\John'

GO

sp_defaultdb 'NETDOMAIN\John', 'courses'

GO

sp_grantlogin 'NETDOMAIN\Sarah'

GO

sp_defaultdb 'NETDOMAIN\Sarah', 'courses'

GO

sp_grantlogin 'NETDOMAIN\Betty'

GO

sp_defaultdb 'NETDOMAIN\Betty', 'courses'

GO

sp_grantlogin 'NETDOMAIN\Ralph'

GO

sp_defaultdb 'NETDOMAIN\Ralph', 'courses'

GO

sp_grantlogin 'NETDOMAIN\Diane'

GO

sp_defaultdb 'NETDOMAIN\Diane', 'courses'

GO

USE courses

GO

sp_grantdbaccess 'NETDOMAIN\John'

GO

sp_grantdbaccess 'NETDOMAIN\Sarah'

GO

sp_grantdbaccess 'NETDOMAIN\Betty'

GO

sp_grantdbaccess 'NETDOMAIN\Ralph'

GO

sp_grantdbaccess 'NETDOMAIN\Diane'

GO

sp_addrole 'Professor'

GO

sp_addrole 'Student'

GO

sp_addrolemember 'Professor', 'NETDOMAIN\John'

GO

sp_addrolemember 'Professor', 'NETDOMAIN\Sarah'

GO

sp_addrolemember 'Professor', 'NETDOMAIN\Diane'

GO

sp_addrolemember 'Student', 'NETDOMAIN\Betty'

GO

sp_addrolemember 'Student', 'NETDOMAIN\Ralph'

GO

sp_addrolemember 'Student', 'NETDOMAIN\Diane'

GO

GRANT SELECT ON StudentGradeView TO Student

GO

GRANT SELECT, UPDATE ON ProfessorGradeView TO Professor

GO

該腳本給 John 和 Sarah 教授提供了更新學生成績的許可權,而學生 Betty 和 Ralph 只能選擇他們自己的成績。Diane 因同時教兩個班,所以添加到兩個角色中。ProfessorGradeView 視圖應將教授限制在自己班學生的行上,而 StudentGradeView 應限制學生只能選擇自己的成績。

SQL Server 2000 和 SQL Server 7.0 版在安裝過程中定義幾個固定角色。可以在這些角色中添加用戶以獲得相關的管理許可權。下面是伺服器范圍內的角色。

固定伺服器角色
描述

sysadmin
可以在 SQL Server 中執行任何活動。

serveradmin
可以設置伺服器范圍的配置選項,關閉伺服器。

setupadmin
可以管理鏈接伺服器和啟動過程。

securityadmin
可以管理登錄和 CREATE DATABASE 許可權,還可以讀取錯誤日誌和更改密碼。

processadmin
可以管理在 SQL Server 中運行的進程。

dbcreator
可以創建、更改和除去資料庫。

diskadmin
可以管理磁碟文件。

bulkadmin
可以執行 BULK INSERT 語句。

可以從 sp_helpsrvrole 獲得固定伺服器角色的列表,可以從 sp_srvrolepermission 獲得每個角色的特定許可權。

每個資料庫都有一系列固定資料庫角色。雖然每個資料庫中都存在名稱相同的角色,但各個角色的作用域只是在特定的資料庫內。例如,如果 Database1 和 Database2 中都有叫 UserX 的用戶 ID,將 Database1 中的 UserX 添加到 Database1 的 db_owner 固定資料庫角色中,對 Database2 中的 UserX 是否是 Database2 的 db_owner 角色成員沒有任何影響。

固定資料庫角色
描述

db_owner
在資料庫中有全部許可權。

db_accessadmin
可以添加或刪除用戶 ID。

db_securityadmin
可以管理全部許可權、對象所有權、角色和角色成員資格。

db_ddladmin
可以發出 ALL DDL,但不能發出 GRANT、REVOKE 或 DENY 語句。

db_backupoperator
可以發出 DBCC、CHECKPOINT 和 BACKUP 語句。

db_datareader
可以選擇資料庫內任何用戶表中的所有數據。

db_datawriter
可以更改資料庫內任何用戶表中的所有數據。

db_denydatareader
不能選擇資料庫內任何用戶表中的任何數據。

db_denydatawriter
不能更改資料庫內任何用戶表中的任何數據。

可以從 sp_helpdbfixedrole 獲得固定資料庫角色的列表,可以從 sp_dbfixedrolepermission 獲得每個角色的特定許可權。

資料庫中的每個用戶都屬於 public 資料庫角色。如果想讓資料庫中的每個用戶都能有某個特定的許可權,則將該許可權指派給 public 角色。如果沒有給用戶專門授予對某個對象的許可權,他們就使用指派給 public 角色的許可權。