A. 誰能提供一個資料庫項目來練練手啊
1) 為表userinfo添加約束,語法如下:
alter table userinfo add constraint uq_userid unique ( userid )
執行成功後,為表的()欄位添加了(b)約束。
a) Userid ; 主鍵
b) Userid ; 唯一
c) Uq_userid ;外鍵
d) Uq_userid ;檢查
2) 運行如下T-SQL,結果返回包含(c)的記錄集。
create table scores
(
scoreid int identity(1,2),
score numeric(4,2) not null,
courseid int
)
insert into scores values(90.5, null);
insert into scores values(100, 2);
select * from scores;
a) 1、90.5、null
3、100、2
b) 1、100、2l
c) 1、90.50、null
d) 1、90.5、null
3、100.0、2
3) 關於子查詢,以下說法正確的是(bd)。(選擇兩項)
a) 一般來說,表連接都可以用子查詢替換。
b) 一般來說,子查詢都可以用表連接替換。
c) 相對於表連接,子查詢適合於作為查詢的篩選條件。
d) 相對於表連接,子查詢適合於查看多表的數據。
4) 創建存儲過程如下:
CREATE procere bookproc
@id int, @title char(20) OUTPUT
as
select @title=title from book where id= @id
執行該存儲過程的方法正確的是(c)。(選擇一項)
a) exec bookproc 1,@title output
print @title
b) exec bookproc @id =1,@title output
print @title
c) declare @title char(20)
exec bookproc 1,@title output
print @title
d) declare @title char(20)
exec bookproc @id =1,@title output
print @title
5) 假設需要設計一個表,記錄各個作者著作的所有圖書信息,表結構設計如下:
作者(作者名稱、圖書1、版本1、書價1、圖書2、版本2、書價2、……),
該表最高符合第(A)範式。
a) 一
b) 二
c) 三
d) 未規范化的
6) 一個學生只能就讀於一個班級,而一個班級可以同時容納多個學生,學生與班級之間是(C)關系。(選擇一項)
a) 一對一
b) 一對多
c) 多對一
d) 多對多
7) E-R圖中,關系集用下面(c)來表示。
a) 矩形
b) 橢圓形
c) 菱形
d) 圓形
8) Sql server中,(a)命令用來刪除表。(選擇一項)
a) Drop
b) Remove
c) Truncate
d) Delete
9) 表結構如下,# 號打頭欄位代表主鍵或組合主鍵,一份訂單可以訂購多種產品。
產品:# 產品編號,產品名稱,產品價格;
訂單:# 訂單編號,# 產品編號,訂購日期,訂購數量;
該表最高符合第(C)範式。(選擇一項)
a) 一
b) 二
c) 三
d) 未規范化的
10) 表結構如下,# 號打頭欄位代表主鍵或組合主鍵,一份訂單可以訂購多種產品。
產品:# 產品編號,產品名稱,產品價格;
訂單:# 訂單編號,總價,支付類型編號,訂購日期;
訂單子項:# 子項編號,訂單編號,產品編號,訂購數量;
該表最高符合第(C)範式。(選擇一項)
a) 一
b) 二
c) 三
d) 未規范化的
11) 創建表sql語句如下:
create table userInfo
(
userId int identity(-1,1), 第一行
username nvarchar(20) not null, 第二行
cardNO char not null, 第三行
age smallint(2), 第四行
address ntext(300) 第五行
)
執行時,會在(DE)出現錯誤。(選擇兩項)
a) 第一行
b) 第二行
c) 第三行
d) 第四行
e) 第五行
12) 以下關於規范設計的描述正確的是(AB)。(選擇兩項)
a) 規范設計的主要目的是消除數據冗餘。
b) 規范設計往往會增加資料庫的性能。
c) 設計資料庫時,規范化程度越高越好。
d) 在規范化資料庫中,易於維護數據完整性。
13) 關於存儲過程,以下說法正確的是(a)。(選擇一項)
a) 不能在存儲過程中使用CREATE VIEW命令。
b) T-SQL批代碼的執行速度要快於存儲過程。
c) 存儲過程必須帶有參數。
d) 存儲過程不能返回結果集。
14) 下面T-SQL代碼運行完的結果是(B)。
declare @counter int
set @counter=1
while @counter<3
begin
set @counter=@counter+1
print @counter
break
print 『loop』
end
a) 2
loop
b) 2
c) 2
loop
3
loop
d) 2
3
15) 閱讀下面T-SQL語句,對變數賦值時存在錯誤的是(C)。(選擇一項)
a) DECLARE @id INT,@price MONEY
set @id=100
set @price=$2.21
b) DECLARE @id INT,@price MONEY
select @id=100,@price=2.21
c) DECLARE @id INT,@price MONEY
set @id=100, @price=2.21
d) DECLARE @id INT,@price MONEY
select @id=100
select @price=$2.21
16) 已知有student表,studentid為主鍵,現在表中共有10行記錄,studentid列值從1
到10。
創建試圖:
CREATE VIEW dbo.VIEW_student
AS
SELECT * FROM dbo.student
接著執行如下命令:
DELETE FROM VIEW_student WHERE (studentid = 8);
然後執行查詢命令:
SELECT * FROM student;
SELECT * FROM VIEW_student;
假定上述命令全部執行成功,將各自返回(D)()行記錄。
a) 10,10
b) 10,9
c) 9,10
d) 9,9
17) 設計用戶表時,身份證號為固定18位長,對該欄位最好採用(B)數據類型。(選擇一項)
a) int
b) char
c) varchar
d) text
18) 授予用戶teacher對Score表的插入和修改的許可權,正確的授權語句是( c)。(選擇一項)
a) GRANT INSERT,UPDATE TO TABLE Score ON teacher
b) GRANT INSERT AND UPDATE TO TABLE Score ON teacher
c) GRANT INSERT,UPDATE ON Score TO teacher
d) GRANT INSERT AND UPDATE ON Score TO teacher
19) 建立如下資料庫表:
CREATE TABLE department(
DeptID int NOT NULL primary key,
DeptName varchar (20) NOT NULL
)
CREATE TABLE Employee (
EmployeeID int NOT NULL,
DeptID int NOT NULL,
Name varchar (20) NOT NULL
)
要想保證Employee表中每一個雇員(Employee)是唯一的,且只能屬於在Department表中已經存在的部門,最優的做法是(b)。(選擇一項)
a) 把EmployeeID 和DeptID 設為組合主鍵。
b) 把EmployeeID設為主鍵,同時在DeptID列上創建一個外健約束。
c) 把EmployeeID設為主鍵,同時在DeptID列上創建一個檢查約束。
d) 在DepartmentID列上創建一個唯一約束,同時在DeptID列上創建一個外健約束。
20) 建立一張員工表(employee),當向表中插入數據時,若不提供入職時間(beginTime),就把系統當前時間自動作為員工入職時間插入資料庫中,以下說法正確的是(d)。(選擇一項)
a) 約束中不能使用各種函數,所以只能使用觸發器來實現。
b) 可以使用CHECK約束實現,默認值採用日期函數getDate()。
c) 入職時間必須設為日期類型。
d) 可以使用DEFAULT 約束實現,默認值採用日期函數getDate()。
21) 為了加快對某表的訪問速度,應對此表建立(d)。(選擇一項)
a) 約束
b) 存儲過程
c) 規則
d) 索引
22) 假設有表student的設計如下:
ID(學號)
Name(姓名)
Address(家庭住址)
Department(所在系)
DepartmentHead(系主任)
該表最高滿足第(A)範式。(選擇一項)
a) 一
b) 二
c) 三
d) 不滿足任何範式;
23) 為資料庫中一個或多個表中的數據提供另一種查看方式的邏輯表被稱為(C)。(選擇一項)
a) 存儲過程
b) 觸發器
c) 視圖
d) 表
24) 要建立一個教師表,包含姓名、職稱、級別等欄位。若插入數據時,級別欄位如果不輸入,預設值為『講師』,最合適的實現方法是(A)。
a) 為 「 級別 」 欄位建立default約束。
b) 為 「 級別 」 欄位建立check 約束。
c) 在教師表上建立一個觸發器 (trigger)。
d) 為教師表數據輸入編寫一個存儲過程進行控制。
25) 現有訂單表orders, 包含數據如下表。若查詢既訂購了產品P01,又訂購了產品P02的顧客編號,可以執行以下()sql語句。(選擇一項)
cid (顧客編號) Pid (產品編號)
C01 P01
C01 P02
C02 P01
C03 P02
a) select distinct(cid) from orders o1 where o1.pid in ('p01','p02')
b) select distinct(cid) from orders o1 where o1.pid='p01' and o1.pid='p02'
c) select distinct(cid) from orders o1 where pid='p01' and exists (select * from orders where pid ='p02' and cid=o1.cid)
d) select distinct(cid) from orders o1,orders o2 where o1.pid='p01' and o2.pid='p02'
26) 關於聚焦索引,以下()說法是錯誤的。(選擇兩項)
a) 一個表最多隻能創建一個聚焦索引。
b) 聚焦索引比非聚焦索引有更快的訪問速度。
c) 主鍵一定是聚焦索引。
d) 創建了聚焦索引的列不允許有重復值。
27) 關於視圖,以下()說法是錯誤的。(選擇一項)
a) 使用視圖,可以簡化數據的使用。
b) 使用視圖,可以保護敏感數據。
c) 視圖是一種虛擬表,視圖中的數據只能來源於物理數據表,不能來源於其它視圖。
d) 視圖中只存儲了查詢語句,並不包含任何數據。
28) 常用的系統存儲過程不包括(D)。(選擇一項)
a) sp_tables
b) sp_columns
c) sp_stored_proceres
d) sp_renametable
29) 對事務描述錯誤的是(BD)。(選擇兩項)
a) 一個事務中的所有命令作為一個整體提交或回滾。
b) 如果兩個並發事務要同時修改同一個表,有可能產生死鎖。
c) Sql server默認將每條單獨的T-SQL語句視為一個事務。
d) 事務必須使用begin transaction來明確指定事務的開始。
30) 分數表scores設計如下:
courseID(課程編號)
studentID(學生編號)
score(分數)
另有一個學生信息表student,包含studentID,sname(學生姓名)。
已知並非所有學生都參加了考試,現在查詢所有及格學生的學生姓名,下面正確的是(A)。(選擇一項)
a) select sname from student where studentID in (select studentID from score where score>60)
b) select sname from student where studentID = (select studentID from score where score>60)
c) select sname from student where studentID not in (select studentID from score where score<=60)
d) select sname from student where exists (select studentID from score where score>60)
31) 關於觸發器,(B)說法是錯誤的。(選擇兩項)
a) 觸發器是一種特殊類型的存儲過程。
b) 可以使用觸發器來響應對數據的select,insert,update,delete操作。
c) 一個表上的觸發器不可以包含對另外一個表的數據操作,以免造成死循環。
d) 觸發器和觸發它的語句構成一個事務。
32) 在(AD)的列上更適合創建索引。(選擇兩項)
a) 需要對數據進行排序
b) 具有默認值
c) 頻繁更改
d) 頻繁搜索
33) SQL Server資料庫有2種登錄認證方式。其中在(C)方式下,需要客戶端應用程序連接時提供登錄時需要的用戶標識和密碼。
a) Windows身份驗證。
b) 以超級用戶身份登錄時。
c) SQL Server 身份驗證。
d) 以系統身份登錄時。
34) SQL Server資料庫中,下列不屬於T-SQL事務管理語句的是(B)。(選擇一項)
a) BEGIN TRANSACTION;
b) END TRANSACTION;
c) COMMIT TRANSACTION;
d) ROLLBACK TRANSACTION;
35) 要建立一個約束,保證用戶表(user)中年齡(age)必須在16歲以上,下面語句正確的是(A)。(選擇一項)
a) Alter table user add constraint ck_age CHECK(age>16)
b) Alter table user add constraint df_age DEFAULT(16) for age。
c) Alter table user add constraint uq_age UNIQUE(age>16)。
d) Alter table user add constraint df_age DEFAULT(age>16)。
36) 銀行系統中有帳戶表和交易表,帳戶表中存儲了各存款人的帳戶余額,交易表中存儲了各存款人每次的存取款金額。為保證存款人每進行一次存、取款交易,都正確的更新了該存款人的帳戶余額,以下選項中正確的做法是(B)。(選擇一項)
a) 在帳戶表上創建insert觸發器。
b) 在交易表上創建insert觸發器。
c) 在帳戶表上創建檢查約束。
d) 在交易表上創建檢查約束。
37) SQL Server資料庫中,包含兩個表:Order訂單表, Item訂單子項目表。
當一個新定單被加入時,數據要分別保存到Order和Item表中,要保證數據完整性,可以使用以下(C)語句。(選擇一項)
a) BEGIN TRANSACTION
INSERT INTO Order VALUES (此處省略)
INSERT INTO Item VALUES (此處省略)
END TRANSACTION
b) BEGIN TRANSACTION
INSERT INTO Order VALUES (此處省略)
INSERT INTO Item VALUES (此處省略)
IF (@@Error = 0)
COMMIT TRANSACTION
ELSE
ROLLBACK TRANSACTION
c) BEGIN TRANSACTION
INSERT INTO Order VALUES (此處省略)
IF (@@Error = 0)
INSERT INTO Item VALUES (此處省略)
IF (@@Error = 0)
COMMIT TRANSACTION
ELSE
ROLLBACK TRANSACTION
ELSE
ROLLBACK TRANSACTION
d) BEGIN TRANSACTION
INSERT INTO Order VALUES (此處省略)
INSERT INTO Item VALUES (此處省略)
IF (@@Error <> 0)
ROLLBACK TRANSACTION
38) 現有一個學生信息表student,包含主鍵studentID (學生編號)。
又有分數表scores,包含studentID(學生編號)、以及 score(考試分數)。
已知student表中共有50個學生,有45人參加了考試(分數存在scores表中),其中10人不及格。執行以下sql語句:
select * from student where exists (select studentid from score where score<60)
可返回(C)條記錄。(選擇一項)
a) 50
b) 45
c) 10
d) 0
39) create table student
(
id int identity(1,1),
name varchar(20)
)
alter table student add constraint uq_name unique(name)
insert into student values(null)
insert into student values(null)
insert into student values(『jack』)
insert into student values(『jack』)
依次執行以上SQL語句後,student表中存在(b)行記錄。
a) 1
b) 2
c) 3
d) 4
40) 已知employee表中具有默認約束df_email, 刪除該約束的語句為(A)。(選擇一項)
a) Alter table employee drop constraint df_email
b) Alter table employee remove constraint df_email
c) Alter table employee delete constraint df_email
d) Remove constraint df_email from table employee
41) 有關T-SQL中變數的使用,以下說法錯誤的是(B)。(選擇一項)
a) 變數的使用必須先聲明,後使用。
b) 變數的賦值只能使用set語句。
c) 可以使用print語句和select語句輸出結果。
d) 局部變數的命名必須以@打頭。
42) 關於觸發器和約束,以下說法錯誤的是(D)。
a) 觸發器可以支持約束的所有功能。
b) Check約束不能跟據另一個表中的列驗證列值。
c) 最好在約束所支持的功能無法滿足應用程序的需求時,再使用觸發器。
d) 在維持數據完整性時,要使用標準的系統錯誤信息,必須使用觸發器。
43) 在某個觸發器中,存在如下代碼片斷:
Declare @p1 int, @p2 int
Select @p1=price from deleted
Select @p2=price from inserted
print convert(varchar, @p2-@p1)
該觸發器是(B)觸發器。
a) select
b) update
c) insert
d) delete
44) 創建存儲過程的片斷如下:
Create procere proc_score
@passed int=60,
@excellent int=90
AS
以下(AB)調用方式是正確的。(選擇兩項)
a) Exec proc_score
b) Exec proc_score 60,90
c) Exec proc_score @passed=65,@excellent=95
d) Exec proc_score @passed=65
45) 現有學生表student和用戶表user, 兩表中的數據如下。
執行sql語句:select * from user union select * from student。
下面說法正確的是(C)。(選擇一項)
user
Userid (int) Name (varchar)
1 Lee
2 Chen
3 Jack
4 rose
student
Studentid (int) Age (int)
1 80
2 75
a) 出現錯誤:name與age不是同一種數據類型。
b) 正確執行,返回6行4列。
c) 正確執行,返回6行2列。
d) 正確執行,返回4行2列。
46) 假設有表scores的設計如下:
ID(編號,主鍵)
StudentID(學生編號)
CourseID(課程編號)
Score(分數)
現在要查詢參加過至少兩門課程考試的學生的各門課程的平均成績。以下sql語句正確的是(C)。(選擇一項)
a) Select studentID, avg(score) from scores group by studentID having count(studentID)>1
b) Select studentID, avg(score) from scores group by studentID where count(studentID)>1
c) Select studentID, avg(score) from scores where count(studentID)>1 group by studentID
d) Select studentID, avg(score) from scores having count(studentID)>1
47) 假設order表中存在orderid等於1的記錄,執行下面T-SQL:
BEGIN TRANSACTION
Delete from Order where orderid=1
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ROLLBACK TRANSACTION
以下說法正確的是(B)。(選擇一項)
a) 執行成功,Orderid為1的記錄被永久刪除。
b) 執行成功,Order表沒有任何變化。
c) 執行時出現錯誤。
d) 執行成功,但事務處理並沒有結束。
48) 項目開發需要經過幾個階段,繪制資料庫的E-R圖應該在(B)階段進行。(選擇一項)
a) 需求分析
b) 概要設計
c) 詳細設計
d) 代碼編寫
49) 將E-R圖轉換為表的過程中,如果實體之間存在多對多的關系,通常的做法是(B)。(選擇一項)
a) 在兩個實體間建立主外鍵關系。
b) 在兩個實體間建立關聯表,把一個多對多的關系分解成兩個一對多的關系。
c) 在兩個實體間建立關聯表,把一個多對多的關系分解成兩個一對一的關系。
d) 在兩個實體間不建立任何關系。
50) 在score表上創建一個觸發器:
create trigger tri_score
on score
for update,delete
as
if (select count(*) from inserted)>0
print('success')
go
在查詢分析器上執行以下(A)語句,可能會輸出「success」。(選擇一項)
a) Update score set score=20
b) Delete from score where score<60
c) Insert into score values ( 此處省略)
d) Select * from score
B. 有關資料庫事務的隔離級別,描述錯誤的是
錯誤抄的是C。
Read uncommitted (讀未提交):最低級別。
Read committed (讀已提交):讀已提交,可避免臟讀情況發生。
Repeatable Read(可重復讀):確保事務可以多次從一個欄位中讀取相同的值,在此事務持續期間,禁止其他事務對此欄位的更新,可以避免臟讀和不可重復讀,仍會出現幻讀問題。
Serializable (串列化):最嚴格的事務隔離級別,要求所有事務被串列執行,不能並發執行,可避免臟讀、不可重復讀、幻讀情況的發生。
(2)以下哪個對資料庫事務的描述是錯誤的擴展閱讀:
資料庫的事務隔離越嚴格,並發副作用越小,但付出的代價也就越大,因為事務隔離實質上就是使事務在一定程度上 「串列化」進行,這顯然與「並發」是矛盾的。同時,不同的應用對讀一致性和事務隔離程度的要求也是不同的,比如許多應用對「不可重復讀」和「幻讀」並不敏感,可能更關心數據並發訪問的能力。