数据库学习笔记1-数据库实验1

文章目录

创建表格的时候出现的一些错误

小白使用sql语句出现的一些错误

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: : 标识符无效

提示出现这个错误,谷歌之后说是,使用了数据库的关键字,但是其实没有,主要是因为最后一行多了一个逗号

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
    );
    

其实是可以了,只是我把这个创建了一遍了,所以就显示重复了

这个错误列表挺奇怪的,命令行会返回说出现了什么问题,这个错误列表就没啥用了

查询所有的表格

sql 复制代码
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的数据类型改为整型。

后面要用的时候都是英文的,但是前面创建表格的时候表的名字都是中文的,所以重新创建一下表

创建大学数据库表格

sql 复制代码
create table department
    (dept_name    varchar(20),
     building     varchar(15),
     budget   number(12,2) check(budget> 0),
     primary key(dept_name)
    );

课程

sql 复制代码
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
    );

教师

sql 复制代码
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
    );

课程段

sql 复制代码
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
    );

授课

sql 复制代码
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
    );

学生

sql 复制代码
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
    );

选课

sql 复制代码
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来辅助学习

sql 复制代码
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 约束条件的行,数据库将抛出一个错误。

sql 复制代码
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);

输入多条修改命令,可以实现修改,最后得到的表格如下

籍贯

sql 复制代码
alter table instructor add native_place varchar(20);

国家代码

sql 复制代码
alter table instructor add cid varchar(20);

性别

sql 复制代码
alter table instructor add gender varchar(1) not null check(gender in ('男','女'));

c

student表中增加属性:gender、native_place(籍贯)。

修改之后是这样,修改命令如下

sql 复制代码
# 学生表格的修改
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。

等下,貌似这个数据库表格里面压根就没有这几个属性

我先把这两个属性加进去,再删除试试

现在把这个属性加进去了

sql 复制代码
alter table section add time_slot_id INT;

通过下面的命令删除

sql 复制代码
ALTER TABLE section DROP COLUMN time_slot_id;

可以发现确实被删除了

sql 复制代码
# 这个压根没有,我先新建,
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的数据类型改为整型。

可以发现目前不是整型,这个的意思是最多存两个字符的字符串

实现了修改

sql 复制代码
ALTER TABLE takes MODIFY (grade INT);

自建项目-在线书店数据库

这个貌似可以直接用代码

sql 复制代码
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
);

全部创建完之后可以发现有这么多表格,最后实验报告加几张自己电脑的截图,就好了,缝缝补补

相关推荐
道爷我悟了1 分钟前
Vue入门-指令学习-v-html
vue.js·学习·html
Cengineering2 分钟前
sqlalchemy 加速数据库操作
数据库
Cikiss24 分钟前
微服务实战——平台属性
java·数据库·后端·微服务
NuyoahC28 分钟前
算法笔记(十一)——优先级队列(堆)
c++·笔记·算法·优先级队列
小小不董37 分钟前
《Linux从小白到高手》理论篇:深入理解Linux的网络管理
linux·运维·服务器·数据库·php·dba
无敌少年小旋风1 小时前
MySQL 内部优化特性:索引下推
数据库·mysql
计算机学姐1 小时前
基于SpringBoot+Vue的在线投票系统
java·vue.js·spring boot·后端·学习·intellij-idea·mybatis
柒小毓1 小时前
将excel导入SQL数据库
数据库
bug菌¹1 小时前
滚雪球学Oracle[2.5讲]:数据库初始化配置
数据库·oracle·数据库初始化·初始化配置
一休哥助手1 小时前
Redis 五种数据类型及底层数据结构详解
数据结构·数据库·redis