项目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表 --
署名-非商业性使用-禁止演绎 4.0 国际 协议(CC BY-NC-ND 4.0)
最后修改:2022 年 12 月 23 日
如果觉得我的文章对你有帮助,可以点个赞再走喔