项目5 创建图书借阅网站项目表及约束
5.2 任务1——创建表
--- 5.2.1 数据类型 ---
--- 2.数值数据类型 ---
-- 例5.1 --
CREATE TABLE TEST_Number1
(
Id Number
);
-- number:当没有规定精度或范围的数值时,指的是number(38),最大取值范围。 --
CREATE TABLE TEST_Number2
(
Id Number(9,2)
);
-- number(9,2):共9位数字,整数最多7位,小数最多2位,小数多的部分四舍五入。 --
CREATE TABLE TEST_Number3
(
Id Number(3)
);
-- number(3):小于等于3位的整数。 --
--- 3.日期数据类型 ---
-- 例5.2 --
CREATE TABLE TEST_DATE1
(
dat date
);
-- 创建日期字段。 --
Insert into TEST_DATE1 values('02 -2月 -89');
Insert into TEST_DATE1 values(date'1980 -3 -24');
-- 插入数据 --
-- 例5.3 --
CREATE TABLE TEST_TIMESTAMP
(
dattime timestamp
);
-- 创建日期时间字段 --
Insert into TEST_TIMESTAMP values(sysdate);
select * from TEST_TIMESTAMP;
-- 插入系统当前时间 --
--- 5.2.2 创建表 ---
CONN SYS /BOOKBORROW AS SYSDBA; -- 以管理员连接 --
GRANT CREATE TABLE TO BOOKUSER; -- 授予BOOKUSER用户CREATE TABLE权限 --
COMMIT; -- 提交事务,永久保存操作结果 --
CONN BOOKUSER /BOOKUSER; -- 切换为BOOKUSER连接 --
CREATE TABLE BOOK
(
ISBN CHAR(13),
BookNo VARCHAR2(20),
BookName VARCHAR2(30),
BookWriter VARCHAR2(20),
BookPublish VARCHAR2(20),
Price Number(6,2),
PublishDate Date,
BookTypeID Number(6)
);
CREATE TABLE BOOKTYPE
(
BookTypeID Number(6),
BookTypeName VARCHAR2(30),
des VARCHAR2(200)
);
-- 创建图书信息表BOOK和BOOKTYPE --
5.3 任务2——使用约束
--- 5.3.2 非空约束 ---
-- 例5.4 --
CREATE TABLE Reader_NULL
(
ID Number,
Name VARCHAR2(40) NOT NULL,
Type Number(1),
Phone Char(11),
Pwd VARCHAR2(40),
Age Number(2)
);
-- 创建表Reader_NULL,要求Name列不允许出现空值 --
--- 5.3.3 主键约束 ---
-- 例5.5 --
CREATE TABLE Reader_PK
(
Id Number PRIMARY KEY,
Name VARCHAR2(40),
Type Number(1),
Phone Char(11),
Pwd VARCHAR2(40),
Age Number(2)
);
-- 创建表Reader_PK,要求将Id列设置为单列主键 --
-- 例5.6 --
CREATE TABLE Reader_PK1
(
Id Number,
Name VARCHAR2(40),
Type Number(1),
Phone Char(11),
Pwd VARCHAR2(40),
Age Number(2),
PRIMARY KEY(Name,Phone)
);
-- 创建表Reader_PK1,要求将Name列和Phone列设置为复合主键。 --
--- 5.3.4 外键约束 ---
-- 例5.7 --
CREATE TABLE ReaderType_PK
(
Id Number(1) PRIMARY KEY,
Name VARCHAR2(30)
);
-- 创建表ReaderType_PK及Reader_FK,其中,ReaderTYPE_PK表中的Id列为主键,Reader_FK表中的Type为与之对应的外键 --
CREATE TABLE Reader_FK
(
Id Number,
Name VARCHAR2(40),
Type Number(1) REFERENCES ReaderType_PK(Id),
Phone Char(11),
Pwd VARCHAR2(40),
Age Number(2)
);
-- 先创建ReaderTYPE_PK,设置主键列,再创建Reader_FK表,设置外键列 --
--- 5.3.5 唯一约束 ---
-- 例5.8 --
CREATE TABLE Reader_UNIQUE
(
Id Number,
Name VARCHAR2(40),
Type Number(1),
Phone Char(11) UNIQUE,
Pwd VARCHAR2(40),
Age Number(2)
);
-- 创建表Reader_UNIQUE,确保读者电话不重复 --
--- 5.3.6 默认值约束 ---
-- 例5.9 --
CREATE TABLE USERS
(
Id Number,
Name VARCHAR2(40),
Type Number(1),
Phone Char(11),
Pwd VARCHAR2(40) DEFAULT('111111'),
Age Number(2)
);
-- 创建表USERS,设置Pwd的默认值为111111 --
--- 5.3.7 检查约束 ---
-- 例5.10 --
CREATE TABLE Reader_CHECK
(
Id Number,
Name VARCHAR2(40),
Type Number(1),
Phone Char(11),
Pwd VARCHAR2(40),
Age Number(2)
CONSTRAINT CK_Reader_CHECK CHECK(Age > =17 AND Age < =26)
);
-- 创建表Reader_CHECK,确保读者年龄为17~26岁之间 --
--- 5.3.8 禁用和激活约束 ---
-- 例5.11 --
ALTER TABLE Reader_CHECK
DISABLE CONSTRAINT CK_Reader_CHECK; -- 禁止检查约束,使CK_Reader_CHECK约束失败 --
ALTER TABLE Reader_CHECK
ENABLE CONSTRAINT CK_Reader_CHECK; -- 激活检查约束,使CK_Reader_CHECK约束生效 --
5.4 任务3——管理表
--- 5.4.1 增加、修改及删除列 ---
--- 1.增加列 ---
-- 例5.12 --
ALTER TABLE USERS
ADD (tmpcol NUMBER(5,2)); -- 在表USERS中添加一个列tmpcol --
DESC USERS; -- 查看表结构语句 --
--- 2.修改列名 ---
-- 例5.13 --
ALTER TABLE USERS RENAME COLUMN tmpcol TO tmpcol_1; -- 将表USERS中的tmpcol列的名称修改为tmpcol_1 --
DESC USERS; -- 查看表结构,tmpcol列名变为tmpcol_1 --
--- 3.更改某列的数据类型 ---
-- 例5.14 --
ALTER TABLE USERS MODIFY(TMPCOL_1 number(5)); -- 将表USERS中TMPCOL_1列的数据类型修改为number(5) --
DESC USERS; -- 查看表结构 --
--- 4.将列设置为不可用 ---
-- 例5.15 --
ALTER TABLE USERS SET UNUSED(tmpcol_1); -- 将表USERS中的列TMPCOL_1设置为不可用 --
DESC USERS; -- 查看表结构 --
select * from USER_UNUSED_COL_TABS; --对于用户设置的不可用列,可以通过数据字典USER_UNUSED_COL_TABS进行查看 --
--- 5.删除不可用列 ---
-- 例5.16 --
ALTER TABLE USERS DROP UNUSED COLUMNS; -- 删除表USERS中所有的不可用列 --
select * from USER_UNUSED_COL_TABS; -- 此处查看不可用列的情况 --
--- 6.删除列 ---
-- 例5.17 --
ALTER TABLE USERS DROP COLUMN Pwd;
-- 将表USERS中的Pwd删除 --
--- 5.4.2 重命名表 ---
-- 例5.18 --
ALTER TABLE USERS RENAME TO USERS1;
-- 将表USERS的名称修改为USERS1 --
--- 5.4.3 设置约束 ---
--- 1.设置非空约束 ---
-- 例5.19 --
ALTER TABLE BOOK MODIFY BookName NOT NULL; -- 为表BOOK的BookName列设置非空约束 --
--- 2.设置主键约束 ---
-- 例5.20 --
ALTER TABLE BOOK add primary key(ISBN); -- 为表BOOK的ISBN列设置主键约束 --
--- 3.设置外键约束 ---
-- 例5.21 --
ALTER TABLE BOOKTYPE add primary key(BookTypeID);
ALTER TABLE BOOK ADD FOREIGN KEY(BookTypeID)
REFERENCES BOOKTYPE(BookTypeID);
-- 为表BOOKTYPE的BookTypeID列设置主键约束,并设置BOOK表中BookTypeID列为外键约束 --
--- 4.设置唯一约束 ---
-- 例5.22 --
ALTER TABLE BOOK add unique(BOOKNO);
-- 为表BOOK的BOOKNO列设置唯一约束 --
--- 5.缺省约束 ---
-- 例5.23 --
ALTER TABLE BOOK MODIFY BOOKPUBLISH DEFAULT('清华大学出版社');
-- 为表BOOK的BOOKPUBLISH列设置缺省约束,默认值为清华大学出版社 --
--- 6.检查约束 ---
-- 例5.24 --
ALTER TABLE BOOK ADD CHECK(PRICE <200);
-- 在BOOK表的PRICE列设置约束,要求单价不超过200 --
--- 5.4.4 删除表 ---
-- 例5.25 --
DROP TABLE USERS CASCADE CONSTRAINTS;
-- 删除USERS表 --
-- 例5.26 --
DROP TABLE USERS CASCADE CONSTRAINTS PURGE;
-- 删除USERS表 --