数据库系统实验二作业-SQL实验报告
实验二 交互式SQL 1(DDL语言实践)
1 实验目的
a) ****熟悉数据库的交互式SQL工具****。如:MySQL 查询分析器。
b) *掌握SQL语言的DDL子语言,在MySQL环境下实现表的定义、删除与修改,掌握索引的建立与删除方法。*
c) *掌握SQL语言的DDL子语言,在MySQL环境下实现表的定义中主键、外键、唯一值、检查、非空和默认值等列级或表级完整性约束条件* *的使用。*
2 实验内容及要求
a) 在MySQL中建立一个数据库,进行实验所要求的各种操作,所有的SQL操作均在此建立的新库里进行。
b) 根据以下实验内容的要求认真填写实验报告,记录所有的实验用例。
(1) *设有如下关系表S:*
****S(NO, NAME, SEX, AGE, CLASS)****,主关键字是NO。
其中NO为学号,char(2),学号不能为空,值是唯一的;
NAME为姓名,char(10),姓名的取值也唯一;
SEX为性别,char(2);
AGE为年龄,int;
CLASS为班号,char(5)。
写出实现下列功能的SQL语句。
TEST
- 创建数据库test,在test中创建表S;
- db
CREATE DATABASE test;
- table
CREATE TABLE S(NO varchar(2) NOT NULL UNIQUE,NAME varchar(10) NOT NULL UNIQUE,SEX varchar(2),AGE int,CLASS varchar(5));
唯一性约束UNIQUE;注意和主键约束区别开!
- 插入一个记录(25,“李明”,“男”,21,“95031”);
再插入一个记录(10,“王丽”,“女”,20,“95101”);
INSERT INTO S(NO,NAME,SEX,AGE,CLASS)
VALUES
('25','李明','男',21,'95031'),
('10','王丽','女',20,'95101');
注意语句中的符号不能出现中文的!
- 插入“95031”班学号为30,姓名为“郑和”的学生记录;
-- 假设郑和同学为男性,且为18岁。
INSERT INTO S(NO,NAME,SEX,AGE,CLASS)
VALUES
('30','郑和','男',18,'95031');
- 对表S,按学号升序建唯一索引(索引名为sno);
-- CREATE <索引名> ON <表名> (<列名> [<长度>] [ ASC | DESC])CREATE INDEX sno ON S (NO ASC );
SHOW INDEX FROM S FROM test;
对表S,按年龄降序建索引(索引名为sage);
-- CREATE <索引名> ON <表名> (<列名> [<长度>] [ ASC | DESC])
CREATE INDEX sage ON S (AGE DESC );
SHOW INDEX FROM S FROM test;
- 向S表添加“入学时间(comedate)”列,其数据类型为日期型(datetime)
alter table S add comedate datetime after CLASS;
- 删除S表的sage索引;
DROP INDEX sage ON S;
- 将年龄的数据类型改为smallint;
alter table S modify column AGE smallint;
- 删除学生姓名必须取唯一值的约束;(注意:MySQL与标准SQL语言有区别)
DROP INDEX NAME ON S;
-- 或ALTER TABLE语法:
-- ALTER TABLE S DROP INDEX NAME;
- 删除S表
drop table S;
- 错误操作示例
a.主键不能为空,当插入记录的主键值为空时报错,如图1-1所示;
b.主键不能重复,必须唯一,当插入的主键值与已存在的主键值相同时报错,如图1-2所示;
c.采用UNIQUE约束的NAME字段必须唯一,当发生重复时会报错,如图1-3所示。
db_SPJ
(2)** *创建数据库db_SPJ*
确保当前操作的数据库为db_SPJ
在db_SPJ中创建以下四个关系(表)
*供应商表S(********SNO********,SNAME,STATUS,CITY)*
*零件表P(********PNO********,PNAME,COLOR,WEIGHT)*
*工程项目表J(********JNO********,JNAME,CITY)*
*供应情况表SPJ(********S NO,PNO,JNO********,QTY)*
² 每一张表都必须有主键。
² 需要使用外键的表必须使用外键。
² 根据需要适当采用唯一值、检查、非空和默认值约束。要求这四种约束在S、P和J表这三张表中至少使用一次。
² 根据主键、外键、唯一值、检查、非空和默认值六种约束的特性,设计适当的方案对S、P和J表中的这六种约束进行检验。方案自定。一种约束进行检验一次即可。
– S表示供应商:各属性依次为供应商号(主键),供应商名,供应商状态值(用bool变量表示,1表示供应,0表示不供应),供应商所在城市;
– P表示零件,各属性依次为零件号,零件名,零件颜色,零件重量,零件存放的城市;
– J表示工程,各属性依次为工程号,工程名字,工程所在城市;
– SPJ表示供货关系,各属性依次为供应商号,零件号,工程号,供货数量。*供应商表S(********SNO********,SNAME,STATUS,CITY)*
*零件表P(********PNO********,PNAME,COLOR,WEIGHT)*
*工程项目表J(********JNO********,JNAME,CITY)*
*供应情况表SPJ(********S NO,PNO,JNO********,QTY)*
DDL:
create database db_spj;-- 创建表S,SNO字段采用PRIMARY KEY和UNIQUE约束,STATUS字段采用NOTNULL约束;
create table S(SNO char(20) UNIQUE,-- 唯一值约束SNAME char(20),`STATUS` smallint NOT NULL, -- 非空约束CITY char(20),primary key(SNO)
);-- 创建表P
create table P(PNO char(20),PNAME char(100),COLOR char(20),WEIGHT smallint,primary key(PNO)
);-- 创建表J,JNAME字段采用DEFAULT约束,DEFAULT默认值为“unknow_JobName”;
create table J(JNO char(20),JNAME char(100) DEFAULT "unknow_JobName", -- 默认值约束CITY char(20),primary key(JNO)
);-- 创建表SPJ,SNO、PNO和JNO字段采用主键和外键约束;
create table SPJ(SNO char(20),PNO char(20),JNO char(20),QTY int CHECK(QTY>=0),-- 检查约束primary key(SNO,PNO,JNO),CONSTRAINT fk_snoFOREIGN KEY(SNO) REFERENCES S(SNO),CONSTRAINT fk_pnoFOREIGN KEY(PNO) REFERENCES P(PNO),CONSTRAINT fk_jnoFOREIGN KEY(JNO) REFERENCES J(JNO)
);
检查主键唯一约束
-- **主键、外键、唯一值、检查、非空和默认值六种约束的特性**-- primary key
insert into j values ('J1','三建','北京'),('J1','三建','深圳');
-- failed!
insert into j values ('J1','三建','北京');
-- sucessful!
检查主键不能为空约束
-- **主键、外键、唯一值、检查、非空和默认值六种约束的特性**
-- primary key
insert into j values (NULL,'三建','北京');
-- failed!
insert into j values ('J10','三建','北京');
-- sucessful!
-- foreign key
-- preparing..
insert into j values ('J1','三建','北京');
insert into s values ('S1','精益',20,'天津');
insert into p values ('P1','螺母','红',12);
-- check
insert into spj values ('S2','P1','J1',200);
-- failed!
insert into spj values ('S1','P1','J1',200);
-- sucessful!
检查UNIQUE约束
表S中的SNO字段采用了UNIQUE约束,因此SNO的值必须唯一,当发生重复时报错;
-- 唯一值
insert into s values ('S1','精益',20,'深圳'); -- sno重复了
-- failed!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z7TyRU6T-1586007338963)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200404195052481.png)]
-- 非空
insert into s values ('S1','精益',NULL,'深圳'); -- NOTNULL!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tFSUMVaY-1586007338964)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200404195211653.png)]
检查DEFAULT约束
表J中的JNAME字段采用了DEFAULT约束,默认值为“unknow_JobName”,若插入时采用默认值,JNAME字段会自动填入默认值“unknow_JobName”,
-- 默认值
insert into j(JNO,CITY) values ('Jt','深圳');
SELECT * FROM J;
-- we can see that the column of the new data is set to the default value 'unknow_JobName'
插入数据
- 插入以下记录
[1] 供应商表S
*sno* | *sname* | *status* | *city* |
---|---|---|---|
S1 | 精益 | 20 | 天津 |
S2 | 盛锡 | 10 | 北京 |
S3 | 东方红 | 30 | 北京 |
S4 | 丰泰 | 20 | 天津 |
S5 | 为民 | 30 | 上海 |
insert into s values
('S1','精益',20,'天津'),
('S2','盛锡',10,'北京'),
('S3','东方红',30,'北京'),
('S4','丰泰',20,'天津'),
('S5','为民',30,'上海');
[2] 零件表P
*pno* | *pname* | *color* | *weight* |
---|---|---|---|
P1 | 螺母 | 红 | 12 |
P2 | 螺栓 | 绿 | 17 |
P3 | 螺丝刀 | 蓝 | 14 |
P4 | 螺丝刀 | 红 | 14 |
P5 | 凸轮 | 蓝 | 40 |
P6 | 齿轮 | 红 | 30 |
insert into p values
('P1','螺母','红',12),
('P2','螺栓','绿',17),
('P3','螺丝刀','蓝',14),
('P4','螺丝刀','红',14),
('P5','凸轮','蓝',40),
('P6','齿轮','红',30);
[3] 工程项目表J
*jno* | *jname* | *city* |
---|---|---|
J1 | 三建 | 北京 |
J2 | 一汽 | 长春 |
J3 | 弹簧厂 | 天津 |
J4 | 造船厂 | 天津 |
J5 | 机车厂 | 唐山 |
J6 | 无线电厂 | 常州 |
J7 | 半导体厂 | 南京 |
insert into j values
('J1','三建','北京'),
('J2','一汽','长春'),
('J3','弹簧厂','天津'),
('J4','造船厂','天津'),
('J5','机车厂','唐山'),
('J6','无线电厂','常州'),
('J7','半导体厂','南京');
[4] 供应情况表SPJ
*sno* | *pno* | *jno* | *qty* |
---|---|---|---|
S1 | P1 | J1 | 200 |
S1 | P1 | J3 | 100 |
S1 | P1 | J4 | 700 |
S1 | P2 | J2 | 100 |
S2 | P3 | J1 | 400 |
S2 | P3 | J2 | 200 |
S2 | P3 | J4 | 500 |
S2 | P3 | J5 | 400 |
S2 | P5 | J1 | 400 |
S2 | P5 | J2 | 100 |
S3 | P1 | J1 | 200 |
S3 | P3 | J1 | 200 |
S4 | P5 | J1 | 100 |
S4 | P6 | J1 | 100 |
S4 | P6 | J4 | 200 |
S5 | P2 | J4 | 100 |
S5 | P3 | J1 | 200 |
S5 | P6 | J2 | 200 |
S5 | P6 | J4 | 500 |
insert into spj values
('S1','P1','J1',200),
('S1','P1','J3',100),
('S1','P1','J4',700),
('S1','P2','J2',100),
('S2','P3','J1',400),
('S2','P3','J2',200),
('S2','P3','J4',500),
('S2','P3','J5',400),
('S2','P5','J1',400),
('S2','P5','J2',100),
('S3','P1','J1',200),
('S3','P3','J1',200),
('S4','P5','J1',100),
('S4','P6','J1',100),
('S4','P5','J4',200),
('S5','P2','J4',100),
('S5','P3','J1',200),
('S5','P6','J2',200),
('S5','P6','J4',500);
汇总
-- all
create database db_spj;
use db_spj;create table S(SNO char(2) UNIQUE, -- 唯一约束SNAME char(20),`STATUS` smallint NOT NULL, -- 非空约束CITY char(20),primary key(SNO)
);create table P(PNO char(2),PNAME char(100),COLOR char(20),WEIGHT smallint,primary key(PNO)
);create table J(JNO char(2),JNAME char(100) DEFAULT "unknow_JobName", -- 默认值约束CITY char(20),primary key(JNO)
);create table SPJ(SNO char(2),PNO char(2),JNO char(2),QTY int CHECK(QTY>=0),-- 检查约束primary key(SNO,PNO,JNO),CONSTRAINT fk_snoFOREIGN KEY(SNO) REFERENCES S(SNO),CONSTRAINT fk_pnoFOREIGN KEY(PNO) REFERENCES P(PNO),CONSTRAINT fk_jnoFOREIGN KEY(JNO) REFERENCES J(JNO)
);insert into s values
('S1','精益',20,'天津'),
('S2','盛锡',10,'北京'),
('S3','东方红',30,'北京'),
('S4','丰泰',20,'天津'),
('S5','为民',30,'上海');insert into p values
('P1','螺母','红',12),
('P2','螺栓','绿',17),
('P3','螺丝刀','蓝',14),
('P4','螺丝刀','红',14),
('P5','凸轮','蓝',40),
('P6','齿轮','红',30);insert into j values
('J1','三建','北京'),
('J2','一汽','长春'),
('J3','弹簧厂','天津'),
('J4','造船厂','天津'),
('J5','机车厂','唐山'),
('J6','无线电厂','常州'),
('J7','半导体厂','南京');insert into spj values
('S1','P1','J1',200),
('S1','P1','J3',100),
('S1','P1','J4',700),
('S1','P2','J2',100),
('S2','P3','J1',400),
('S2','P3','J2',200),
('S2','P3','J4',500),
('S2','P3','J5',400),
('S2','P5','J1',400),
('S2','P5','J2',100),
('S3','P1','J1',200),
('S3','P3','J1',200),
('S4','P5','J1',100),
('S4','P6','J1',100),
('S4','P5','J4',200),
('S5','P2','J4',100),
('S5','P3','J1',200),
('S5','P6','J2',200),
('S5','P6','J4',500);
导出
- 导出所有的数据(供下一实验用)
mysqldump -hlocalhost -uroot -pmypassword db_spj > D:\vs_code\db_spj.sql
- 约束检查示例
a) 创建表S,SNO字段采用PRIMARY KEY和NOT NULL约束,SNAME字段采用UNIQUE约束;
b) 创建表P,WEIGHT字段采用CHECK约束,CHECK条件为WEIGHT>0;
c) 创建表J,JNAME字段采用DEFAULT约束,DEFAULT默认值为“工厂”;
d) 创建表SPJ,SNO、PNO和JNO字段采用主键和外键约束;
e) 检查主键唯一约束;
f) 检查主键不能为空约束;
g) 检查UNIQUE约束,表S中的SNAME字段采用了UNIQUE约束,因此SNAME的值必须唯一,当发生重复时报错;
h) 检查DEFAULT约束,表J中的JNAME字段采用了DEFAULT约束,默认值为“工厂”,若插入时采用默认值,JNAME字段会自动填入默认值“工厂”,
i) 检查外键级联操作CASCADE,当表P中主键“P2”更新为“P200”时,SPJ表中相应位置的外键“P2”同时更新为“P200”;
j) 检查外键级联操作NO ACTION,当被参照表中发生删除或更新时将会报错;
k) 检查外键级联操作SET DEFAULT,此时外键必须事先设定默认值,表SPJ中将SNO默认值设为“S1”,PNO默认值设为“P1”,JNO默认值设为“J1”,当被参照表S中“S2”所在行被删除后,SPJ表中对应的“S2”更新为默认值“S1”;
3 实验提示:
a) 学会使用 MySQL的联机丛书。
b) 查看具体表的信息可使用如下SQL命令:exec sp_help <表名>;
4 考核内容
对照以下考核点,完成以下内容:
a) 确定自己熟练掌握之后联系助教进行考核,助教将从考核点中随机抽取4个,考核分数将登记在册,分值占比80%。
b) 完成《实验报告》,对所有的考核点进行操作说明(对应的SQL语句/操作、输出截图),分值占比20%。
考核点 | 分值 |
---|---|
1、创建一个临时表test,包含至少4个不同类型的属性,并指定主码 | 20 |
2、修改test表中一个已有属性为另一类型 | 20 |
3、修改test表,插入一个新的列“new_attr”,数据类型为日期型 | 20 |
4、向test表中插入2条数据 | 20 |
5、更新test表中某一行数据 | 20 |
6、按test表中某一属性升序建立索引 | 20 |
7、删除test表任一索引 | 20 |
8、删除test表中所有数据(但保留表) | 20 |
9、删除test表 | 20 |
解答:
1、创建一个临时表test,包含至少4个不同类型的属性,并指定主码
create TABLE test(id int primary key,name char(20),time datetime,weight smallint
);
2,修改test表中一个已有属性为另一类型
alter table test modify column id varchar(20);
3.修改test表,插入一个新的列“new_attr”,数据类型为日期型 20
alter table test add column new_attr datetime;
4、向test表中插入2条数据 20
insert into test values
('s1','xiaoming','1999-09-10',140,'2099-09-10'),
('s2','xiaohuang','1998-09-10',125,'2098-09-10');
5、更新test表中某一行数据 20
UPDATE test
SET weight = '150'
WHEREname = 'xiaoming';
6、按test表中某一属性升序建立索引 20
-- CREATE <索引名> ON <表名> (<列名> [<长度>] [ ASC | DESC])
CREATE INDEX weight_index ON test (weight DESC );
SHOW INDEX FROM test;
7、删除test表任一索引 20
DROP INDEX weight_index ON test;
8、删除test表中所有数据(但保留表) 20
truncate test;
select * from test;
9、删除test表 20
drop table test;
show tables;
数据库系统实验二作业-SQL实验报告相关推荐
- 江南大学物联网工程学院数据库课程实验二作业2实验报告
一.开发环境 DBMS: Microsoft SQL Server 2019 (64- bit) 可视化管理工具: Microsoft SQL Server Management Studio- 18 ...
- 20175212童皓桢 Java实验二-面向对象程序设计实验报告
20175212童皓桢 Java实验二-面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设 ...
- 【数据库实验课堂】实验二 使用SQL Server管理数据表
实验二 使用SQL Server管理数据表: 1.请在指定数据库内完成以下内容: 1) 依据数据表的结构创建相对应的数据表,表结构如下所示: **学生信息表(student)**字段名称 字段类型及长 ...
- 20172310《程序设计与数据结构》(下)实验二:二叉树实验报告
20172310<程序设计与数据结构>(下)实验二:二叉树实验报告 报告封面 课程:<软件结构与数据结构> 班级: 1723 姓名: 仇夏 学号:20172310 实验教师:王 ...
- java 二叉树实验报告_20172310《程序设计与数据结构》(下)实验二:二叉树实验报告...
20172310<程序设计与数据结构>(下)实验二:二叉树实验报告 报告封面 课程:<软件结构与数据结构> 班级: 1723 姓名: 仇夏 学号:20172310 实验教师:王 ...
- matlab建立二阶开环系统仿真图,实验二 Simulink仿真实验
实验二 Simulink仿真实验 一. 实验目的: 1.学会使用Matlab软件中的Simulink仿真工具. 2.了解二阶系统瞬态响应指标的意义其计算. 二. 实验内容及原理 1. 用Matlab仿 ...
- 【通信原理】实验二 角度调制实验
目录 实验二 角度调制实验 一.实验目的 二.实验原理: 1.角度调制 (1)角度调制 (1)频率调制(FM): (2)相位调制(PM) (3)单音调制FM与PM (4)非相干解调 2.MATLAB中 ...
- CSAPP实验二——bomb lab实验
CSAPP实验二-- bomb lab实验 实验前准备 第一部分(phase_1) 第二部分(phase_2) 第三部分(phase_3) 第四部分(phase_4) 第五部分(phase_5) 第六 ...
- 计算机图形学——实验二 几何图形变换实验
实验二 几何图形变换实验 一.实验目的和要求 进一步掌握二维.三维变换的数学知识.变换原理.变换种类.变换方法: 利用OpenGL实现二维.三维图形变换,在屏幕上显示变换过程或变换结果: 掌握Open ...
最新文章
- Keras训练神经网络进行分类并使用GridSearchCV进行参数寻优
- MySQL 高级 - 索引 - 索引分类
- python数据可视化的特点_Python数据可视化, 看这一篇就够了
- Initializer provides no value for this binding element and the binding element has no default value
- zabbix网络发现主机
- 【TensorFlow】TensorFlow从浅入深系列之五 -- 教你详解滑动平均模型
- 用Python爬数据,FineBI做分析后,我发现淘宝的手机原来这么便宜
- UVA 10391 STL容器的使用
- Chapter 1 First Sight——37
- mac搜索不到wifi wtg_如何设置隐藏wifi 防止蹭网隐藏wifi方法【详解】
- java番茄钟_番茄时间管理 - java Swing版
- 利用IE登陆windows 2003 的终端服务器
- 《西游记》《封神榜》各路神仙基本层次图,不要再傻傻分不清楚了
- Julia·Pluto·Plots报错解决方法
- 微信只允许二级分销,否则封停账号,三级分销何去何从?
- Python实战项目:俄罗斯方块(源码分享)(文章较短,直接上代码)
- 时间函数millis( )
- 《高难度谈话》你需要知道的高效沟通技巧
- 期货模拟盘有效果吗?
- jpush android 离线推送,JPush极光推送3分钟搞定Android Push