一、实验准备
(1)运行SQL-SERVER服务管理器, 启动服务
(2)运行查询分析器, 以DBA身份登录数据库服务器:
用户名sa, 密码123456
(3)打开CREATE-TABLE.SQL并执行, 建立有关表.
“CREATE-TABLES.SQL”文件 https://www.cnblogs.com/wkfvawl/p/10843788.html
二 实验内容
1. 建立图书管理有关表,要求有完整性约束(实体,参照,用户定义):
注意: 外码与对应主码的类型一致!
出版社( 出版社号, 出版社名) 主码?
PUBLISHER(PNO,PNAME)
图书(书号,书名,价格,作者, 出版社号) 主码?外码?
BOOK(BNO,TITLE, PRICE, AUTHOR , PNO)
读者(读者号,姓名,性别,年龄)主码?
READER(RNO,NAME, AGE, SEX)
借阅(读者号,书号,借日期,还日期) 日期类型DATETIME,主码?外码?
LOAN(RNO, BNO, LOANDATE, RETURNDATE)
数据类型:
CHAR(n) 字符型
INT 整型
NUMERIC ( 精度,小数位数) 实型 精度是总有效位数
DATETIME 日期型
建立PUBLISHER的语句截图:
CREATE TABLE PUBLISHER ( PNO CHAR(10) PRIMARY KEY, PNAME CHAR(20) NOT NULL )
建立BOOK的语句截图:
CREATE TABLE BOOK ( BNO CHAR(10) PRIMARY KEY, TITLE CHAR(40) NOT NULL, PRICE NUMERIC(5,2) NOT NULL, AUTHOR CHAR(20) NOT NULL, PNO CHAR(10) REFERENCES PUBLISHER(PNO) )
建立READER的语句截图:
CREATE TABLE READER ( RNO CHAR(10) PRIMARY KEY, RNAME CHAR(20) NOT NULL, AGE INT NOT NULL, SEX CHAR(20) CHECK (SEX IN ('男','女')) )
建立LOAN的语句截图(约束还书日期>=借书日期,
(CHECK约束涉及多个列, 用元组级CHECK实现)
CREATE TABLE LOAN ( RNO CHAR(10), BNO CHAR(10), LOANDATE DATETIME, RETURNDATE DATETIME, PRIMARY KEY(RNO,BNO), FOREIGN KEY (RNO) REFERENCES READER(RNO), FOREIGN KEY (BNO) REFERENCES BOOK (BNO), CHECK (RETURNDATE>=LOANDATE) )
2. 为用户 'ZhangPing' 创建了一个密码为'Rose'的 SQL Server 登录
语法格式: EXEC sp_addlogin '用户名', '密码'
EXEC sp_addlogin 'ZhangPing', 'Rose'
3. 将用户 ZhangPing 添加到当前数据库
语法格式: EXEC sp_adduser '用户名'
EXEC sp_adduser 'ZhangPing'
4. 将PUBLISHER表的查询权,插入权授予PUBLIC
(注意SQL SERVER与教材不同:授权语句中要去掉关键字TABLE 一次只能对一个表授权)
GRANT SELECT , INSERT
ON PUBLISHER
TO PUBLIC
5. 将BOOK所有权授予ZhangPing
GRANT ALL
ON BOOK
TO ZhangPing
6. 将READER的查询权授予ZhangPing
GRANT SELECT
ON READER
TO ZhangPing
7. 将LOAN的插入权删除权授予ZhangPing
GRANT SELECT,DELETE
ON LOAN
TO ZhangPing
8. 将READER的查询权修改权授予ZhangPing
GRANT SELECT,UPDATE
ON READER
TO ZhangPing
9. 将LOAN的删除权从ZhangPing收回
REVOKE DELETE
ON LOAN
TO ZhangPing
10重新以ZhangPing登录 ( 查询分析器选择文件菜单的”连接”, 输入用户名ZhangPing, 密码Rose)
登录后, 注意将当前数据库选择为”STUDB”。
登录后更改密码, 将密码'Rose'改为 'coffee'
格式: EXEC sp_password '旧密码', '新密码'
EXEC sp_password 'Rose', 'coffee'
11. 对PUBLISHER插入1行数据。
对BOOK插入1行数据
SQL语句执行截图:
INSERT INTO PUBLISHER(PNO,PNAME) VALUES('123456','清华大学出版社')
INSERT INTO BOOK VALUES('159317','数据库系统概论',42.00,'王珊,萨师煊','123456');
12. 查询BOOK所有数据 。
SELECT *
FROM BOOK
13. 查询LOAN所有数据, 报错(未被授权查询)
拒绝了对对象 'LOAN'(数据库 'STUDB',所有者 'dbo')的 SELECT 权限。
14. 插入一行READER数据, 报错(未被授权查询)
拒绝了对对象 'READER'(数据库 'STUDB',所有者 'dbo')的 INSERT 权限。
15. 建立一个班级表CLASS, 有班号,班名列, 报错(无权建表)
服务器: 消息 262,级别 14,状态 1,行 1
在数据库 'STUDB' 中拒绝了 CREATE TABLE 权限。
16、重新以DBA登录 (注意当前数据库是STUDB)
对STUDENT表的Sdept建立普通索引
CREATE INDEX STUDEPT ON STUDENT(SDEPT)
17、对COURSE表的CNAME建立唯一索引
SQL语句执行截图:
CREATE UNIQUE INDEX COURSENAME ON COURSE(CNAME)