文章目录
- 创建表格的时候出现的一些错误
- 查询所有的表格
- 实验一
- 查询单个表格
- 分块
- 修改大学数据库表格
- 创建大学数据库表格
- 系
- 课程
- 教师
- 课程段
- 授课
- 学生
- 选课
- 注意
- 吐槽
- 修改大学数据库表格2(英文版本)
- a
- b
- c
- d
- e
- 自建项目-在线书店数据库
创建表格的时候出现的一些错误
小白使用sql
语句出现的一些错误
create table 课程段
(课程号 varchar(5),
课程段号 varchar(8),
学期 varchar(6) check(学期 in ('Fall', 'Winter', 'Spring', 'Summer')),
年份 number(4,0) check(年份 > 2001 and 年份 < 2050),
primary key(课程号, 课程段号, 学期, 年份),
foreign key(课程号) references 课程 on delete cascade,
);
我输入上面的语句,试图创建一个表格,
第 8 行出现错误:
ORA-00904: : 标识符无效
提示出现这个错误,谷歌之后说是,使用了数据库的关键字,但是其实没有,主要是因为最后一行多了一个逗号
create table 课程段
(课程号 varchar(5),
课程段号 varchar(8),
学期 varchar(6) check(学期 in ('Fall', 'Winter', 'Spring', 'Summer')),
年份 number(4,0) check(年份 > 2001 and 年份 < 2050),
primary key(课程号, 课程段号, 学期, 年份),
foreign key(课程号) references 课程 on delete cascade
);
其实是可以了,只是我把这个创建了一遍了,所以就显示重复了
这个错误列表挺奇怪的,命令行会返回说出现了什么问题,这个错误列表就没啥用了
查询所有的表格
SELECT TABLE_NAME FROM USER_TABLES;
经过查询,显示有14
个表格
实验一
第1、3题创建的表的名字都以“T_”开头
总共有三个题目,第一题和已有的实验报告里面的完全一致,我仔细检查了一遍,原来所有题目和实验报告的题目其实是完全一样的
查询单个表格
desc 课程段
分块
首先是图书采购的表格的创建,然后是修改大学数据库中的表,最后是自己做一个表格,比如说在线书店,总共是三个部分
修改大学数据库表格
增加“国家”表(表名为:T_country),属性:cid(国家代码)、name(国名)等。
instructor表中增加属性:age、gender、cid、academic_title(职称)、native_place(籍贯)。
student表中增加属性:gender、native_place(籍贯)。
删除section表中的属性:time_slot_id、room_number。
将takes表中grade的数据类型改为整型。
后面要用的时候都是英文的,但是前面创建表格的时候表的名字都是中文的,所以重新创建一下表
创建大学数据库表格
系
create table department
(dept_name varchar(20),
building varchar(15),
budget number(12,2) check(budget> 0),
primary key(dept_name)
);
课程
create table course
(course_id varchar(5),
title varchar(50),
dept_name varchar(20),
credits number(2,0) check(credits > 0),
primary key(course_id),
foreign key(dept_name) references department
on delete set null
);
教师
create table instructor
(ID varchar(7),
name varchar(20) not null,
dept_name varchar(20),
salary number(8,2) check(salary > 29000),
primary key(ID),
foreign key(dept_name) references department on delete set null
);
课程段
create table section
(course_id varchar(5),
sec_id varchar(8),
semester varchar(6) check(semester in ('Fall', 'Winter', 'Spring', 'Summer')),
year number(4,0) check(year > 2001 and year < 2050),
primary key(course_id, sec_id, semester, year),
foreign key(course_id) references course on delete cascade
);
授课
create table teaches
(ID varchar(7),
course_id varchar(5),
sec_id varchar(8),
semester varchar(6),
year number(4,0),
primary key(ID, course_id, sec_id, semester, year),
foreign key(course_id,sec_id, semester, year) references section on delete cascade,
foreign key(ID) references instructor on delete cascade
);
学生
create table student
(ID varchar(10),
name varchar(20) not null,
dept_name varchar(20),
tot_cred number(3,0) check(tot_cred >= 0),
primary key(ID),
foreign key(dept_name) references department on delete set null
);
选课
create table takes
(ID varchar(10),
course_id varchar(5),
sec_id varchar(8),
semester varchar(6),
year number(4,0),
grade varchar(2),
primary key(ID, course_id, sec_id, semester, year),
foreign key(course_id,sec_id, semester, year) references section on delete cascade,
foreign key(ID) references student on delete cascade
);
注意
课程段号和开课号是一个意思(姑且这么记忆就行),英文缩写都是sec_id
学生的学号和老师的教师号都是ID
吐槽
这个中英文转换确实老费时间了,经过查询,现在有21
个表格了
第一个采购图书主要任务是创建表格,创建完成了
修改大学数据库表格2(英文版本)
修改的具体内容和往年的要求不太一样,五个小问只有一问是相等的
a
增加“国家”表(表名为:T_country),属性:cid(国家代码)、name(国名)等。
启发是可以多多使用ai
来辅助学习
CREATE TABLE T_country (
cid CHAR(2) PRIMARY KEY, -- 假设国家代码是两位字符
name VARCHAR2(100) NOT NULL -- 国名可能较长,这里使用VARCHAR2类型并设定长度为100,你可以根据需要调整
);
b
instructor表中增加属性:age、gender、cid、academic_title(职称)、native_place(籍贯)。
现在老师的这个数据库有四个属性,教师号,姓名,系名,工资,需要增加五个属性
NOT NULL 是一个约束,用于确保某个列(字段)不包含 NULL 值。当你为一个表的列定义 NOT NULL 约束时,该列在插入新记录或更新现有记录时都必须有一个值,不能是 NULL
CHECK 约束用于限制列中的值范围。它确保列中的所有数据都满足指定的条件。如果试图插入或更新不满足 CHECK 约束条件的行,数据库将抛出一个错误。
alter table instructor add academic_title varchar(5) not null check(academic_title in ('教授','副教授','讲师'));
新增之后可以发现,在表格里面多了一行属性
数据库表格里面的行,貌似被称为列(column)
增加年龄,限制必须非空且大于18
岁alter table instructor add age INT not null check(age>=18);
输入多条修改命令,可以实现修改,最后得到的表格如下
籍贯
alter table instructor add native_place varchar(20);
国家代码
alter table instructor add cid varchar(20);
性别
alter table instructor add gender varchar(1) not null check(gender in ('男','女'));
c
student表中增加属性:gender、native_place(籍贯)。
修改之后是这样,修改命令如下
# 学生表格的修改
alter table student add gender varchar(1) not null check(gender in ('男','女'));
alter table student add native_place varchar(20);
d
删除section表中的属性:time_slot_id、room_number。
等下,貌似这个数据库表格里面压根就没有这几个属性
我先把这两个属性加进去,再删除试试
现在把这个属性加进去了
alter table section add time_slot_id INT;
通过下面的命令删除
ALTER TABLE section DROP COLUMN time_slot_id;
可以发现确实被删除了
# 这个压根没有,我先新建,
alter table section add time_slot_id INT;
alter table section add room_number INT;
# 删除
ALTER TABLE section DROP COLUMN time_slot_id;
ALTER TABLE section DROP COLUMN room_number;
e
将takes表中grade的数据类型改为整型。
可以发现目前不是整型,这个的意思是最多存两个字符的字符串
实现了修改
ALTER TABLE takes MODIFY (grade INT);
自建项目-在线书店数据库
这个貌似可以直接用代码
create table T_author
(name varchar(5),
address varchar(20),
URL varchar(25) not null,
primary key(name)
);
create table T_book1
(ISBN varchar(13),
title varchar(10),
year numeric(4,0),
price numeric(4,2),
primary key(ISBN)
);
create table T_publisher
(name varchar(10),
phone varchar(11) not null,
address varchar(20) not null,
URL varchar(20) not null,
primary key(name)
);
create table T_shopping_basket
(basket_id varchar(10) primary key
);
create table T_warehouse
(code varchar(6) primary key,
address varchar(20),
phone varchar(11)
);
create table T_customer
(email varchar(15) primary key,
name varchar(5),
address varchar(20),
phone varchar(11)
);
create table T_written_by
(name varchar(5),
ISBN varchar(13),
primary key(name,ISBN),
foreign key(name) references T_author on delete cascade,
foreign key(ISBN) references T_book1 on delete cascade
);
create table T_published_by
(name varchar(5),
ISBN varchar(13),
primary key(name,ISBN),
foreign key(name) references T_publisher on delete cascade,
foreign key(ISBN) references T_book1 on delete cascade
);
create table T_contains
(ISBN varchar(13),
basket_id varchar(10),
num numeric(4,0),
primary key(ISBN,basket_id,num),
foreign key(ISBN) references T_book1 on delete cascade,
foreign key(basket_id) references T_shopping_basket on delete cascade
);
create table T_stocks
(ISBN varchar(13),
code varchar(6),
num numeric(4,0),
primary key(ISBN,code,num),
foreign key(ISBN) references T_book1 on delete cascade,
foreign key(code) references T_warehouse on delete cascade
);
create table T_basket_of
(basket_id varchar(10),
email varchar(15),
primary key(basket_id,email),
foreign key(basket_id) references T_shopping_basket on delete cascade,
foreign key(email) references T_customer on delete cascade
);
全部创建完之后可以发现有这么多表格,最后实验报告加几张自己电脑的截图,就好了,缝缝补补