【作业3】管理表


一、创建表

创建图书馆管理系统所涉及的表

创建产品销售系统所涉及的表

 

图书表book(bid,bname,price,qty)

书库表lib(lid,lname,address)

读者表reader(rid,rname,dept)

借阅表loan(bid,rid,loanDate)

## 各表初始化

drop table book;
drop table lib;
drop table reader;
drop table loan;

## 各表的创建

CREATE TABLE book(
bid varchar2(10),
bname long,
price number(8,2),
qty number(4)
);

CREATE TABLE lib(
lid varchar2(10),
lname varchar(30),
address varchar2(50)
);
CREATE TABLE reader(
rid varchar2(10),
rname varchar2(30),
dept varchar2(40)
);
 
CREATE TABLE loan(
bid varchar2(10),
rid varchar2(10),
loanDate varchar2(30)
);

二、修改表

1、为各表创建约束

DBMS自动实现数据的完整性—借助于约束的作用:保证数据库中永久数据的正确性(主键唯一,不能引用不存在的对象,满足用户定义的条件)

创建主键约束(为图书表、读者表、借阅表创建主键)

主键:唯一标识,该字段的值必须与别的实体必须是不一样的

由dbms保证数据的正确性

##以下为各表主键

alter table book
add constraint pk_book primary key(bid);
 
alter table lib
add constraint pk_lib primary key(lid);
 
alter table reader
add constraint pk_reader primary key(rid);
 
alter table loan
add constraint pk_loan primary key(bid,rid);

##创建外键约束(为借阅表创建外键)

alter table loan
add constraint fk_loan foreign key(bid) references book(bid);
 
alter table loan
add constraint fk2_loan foreign key(rid) references reader(rid);

##创建用户自定义约束(指定图书表中价格必须为正值)

alter table book
add constraint ck_price check (price>=0);

##附违反约束条件例子

insert into book (bid,bname,price,qty) values (‘1′,’数据结构’,-48.00,200);

## 2、对各表进行字段调整操作

## 添加新字段

## 在图书表中添加“是否热门”字段

alter table book
add (是否热门 varchar2(20));

## 修改字段类型

## 修改图书表中书名字段为变长字符串

alter table book
modify (bname varchar2(30));

## 删除不用的字段

## 删除图书表中“是否热门”字段

alter table book
drop column 是否热门;

三、删除表

## 删除无关联表

## 删除包含外键引用的表

drop table loan;

四、创建查询表

## 先对book表插入数据

insert into book (bid,bname,price,qty) values (‘1′,’Oracle数据库’,38.00,200);
insert into book (bid,bname,price,qty) values (‘2′,’数据结构’,28.00,188);
insert into book (bid,bname,price,qty) values (‘3′,’JAVA程序设计’,48.00,400);

## 创建所有昂贵书籍表

##整理格式,虽然还是好长 可能是因为bname为long

set pagesize 30
set linesize 999
select * from book;

##查询语句

select *
from book
where price>=20
order by price;

五、对借阅情况表进行截断操作

/*这段好像没啥用

 

解释是

DDL是数据定义语言,如drop,alter,truncate等都是DDL

insert,update,delete,merge等都是DML

在oracle里DML是可以rollback的,而DDL是不可以的

 

delete * from loan

dml 日志多

ddl 日志少*/

truncate table loan;

/*在Oracle中如果删除了表中的某一条数据,还可以通过回滚操作(rollback)进行回滚,假如想清空一张

表的数据,但是又不想使其能进行回滚操作,就需要使用截断操作。*/

 

##话说 这段查询语句在我的表里  确实没啥用处 因为没啥数据 无输出 不理解意思

select * from book where bid in(
select bidfrom book
group by bid
having count(bid)>1);

老师评语:

最贵书籍表的创建

CREATE TABLE expBook as
SELECT * FROM book WHERE price >= &expPrice;

声明:TIL|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA[ZH]协议进行授权

转载:转载请注明原文链接 - 【作业3】管理表


Life is very interesting. In the end, some of your greatest pains become your greatest strengths.