数据库系统原理及MySQL应用教程实验三MySQL数据库表的数据插入、修改、删除操作

实验  3   MySQL数据库表的数据插入、修改、删除操作

一、实验目的

1.掌握MySQL数据库表的数据插入、修改、删除操作SQL语法格式

2.掌握数据表的数据的录入、增加和删除的方法

二、实验内容

1. 验证性实验:在学校教师管理数据库中的teacherInfo表中完成插入数据、更新数据和删除数据操作。

2.设计性试验:在某超市的食品管理的数据库的Food表中完成插入数据、更新数据和删除数据操作。

三、实验步骤与实验结果

验证性实验

学校教师管理数据库中的teacherInfo表,其表的定义如下表所示,请完成如下操作。

字段名

字段描述

数据类型

主键

外键

非空

唯一

自增

num

教工号

INT(10)

name

姓名

VARCHAR(20)

sex

性别

VARCHAR(4)

birthday

出生日期

DATETIME

address

家庭住址

VARCHAR(50)

1.创建teacherInfo表

CREATE TABLE  teacherInfo(

num INT(10) NOT NULL  UNIQUE PRIMARY KEY,

Name VARCHAR(20) NOT NULL,

sex VARCHAR(4) NOT NULL,

birthday DATETIME,

address VARCHAR(50)

); 

 2. 向teacherInfo表中插入记录。

INSERT INTO teacherInfo VALUES(1001,'张龙','男','1984-11-08','北京市昌平区');

INSERT INTO teacherInfo VALUES(1002,'李梅','女','1970-01-21','北京市海淀区');

INSERT INTO teacherInfo VALUES(1003,'王一丰','男','1976-10-30','北京市昌平区');

INSERT INTO teacherInfo VALUES(1004,'赵六','男','1980-06-05','北京市顺义区');

3.操作后查看表

SELECT * FROM teacherinfo;

4.更新教工号为1003的记录,将生日(birthday)改为“1982-11-08”。

UPDATE teacherInfo SET birthday='1982-11-08' WHERE num=1003;

5.将性别(sex)为“男”的记录的家庭住址(address)都变为“北京市朝阳区”。

UPDATE teacherInfo SET address='北京市朝阳区' WHERE sex='男';

6.删除教工号(num)为1002的记录删除。

DELETE FROM teacherInfo WHERE num=1002;

7.操作后查看表

SELECT * FROM teacherinfo;

设计性实验

某超市的食品管理的数据库的Food表,Food表的定义如表所示,请完成插入数据、更新数据和删除数据。

Food表的定义

字段名

字段描述

数据类型

主键

外键

非空

唯一

自增

foodid

食品编号

INT(4)

Name

食品名称

VARCHAR(20)

Company

生产厂商

VARCHAR(30)

Price

价格(单位:元)

FLOAT

Product_time

生产年份

YEAR

Validity_time

保质期(单位:年)

INT(4)

address

厂址

VARCHAR(50)

1.创建食品管理数据库。

CREATE DATABASE foodCompanies;

2.创建Food表。

CREATE TABLE food(

foodid INT(4) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,

Name VARCHAR(20) NOT NULL,

Company VARCHAR(30) NOT NULL,

Price FLOAT NOT NULL,

Product_time YEAR,

Validity_time INT(4),

address VARCHAR(50)

);

3.采用3种方式,将表的记录插入到Food表中。

(1)不指定具体的字段,插入数据: 'QQ饼干','QQ饼干厂',2.5,'2018',3,'北京'。

INSERT INTO food VALUES(foodid,'QQ饼干','QQ饼干厂',2.5,'2018',3,'北京');

(2)依次指定food表的字段,插入数据: 'MN牛奶','MN牛奶厂',3.5,'2019',1,'河北'

INSERT INTO food

(`Name`,Company,Price,Product_time,Validity_time,address)

VALUES

('MN牛奶','MN牛奶厂',3.5,'2019',1,'河北');

(3)同时插入多条记录,插入数据:

'EE果冻','EE果冻厂',1.5,'2017',2,'北京',

'FF咖啡','FF咖啡厂',20,'2012',5,'天津',

'GG奶糖','GG奶糖',14,'2013',3,'广东';

INSERT INTO food

(`Name`,Company,Price,Product_time,Validity_time,address)

VALUES

('EE果冻','EE果冻厂',1.5,'2017',2,'北京'),

('FF咖啡','FF咖啡厂',20,'2012',5,'天津'),

('GG奶糖','GG奶糖厂',14,'2013',3,'广东');

(4)操作后查看表

SELECT * FROM food;

4.将“MN牛奶厂”的厂址(address)改为“内蒙古”,并且将价格改为3.2。

UPDATE food SET address='内蒙古',Price=3.2

WHERE

Company='MN牛奶厂';

5.将厂址在北京的公司的保质期(validity_time)都改为5年。

UPDATE food SET Validity_time=5

WHERE

address='北京';

6.删除过期食品的记录。若当前时间-生产年份(producetime)>保质期(validity_time),则视为过期食品。

DELETE FROM food

WHERE

Validity_time<(2022-Product_time);

7.删除厂址为“北京”的食品的记录。

DELETE FROM food

WHERE

address='北京';

四、观察与思考

1.对于删除的数据,如何实现”逻辑删除“(即数据库中的数据不删除,给用户的感觉是删除了)?

答:通常使用一个is_deleted字段标示行记录是不是被删除(或者使用一个status字段代表所谓的“删除”状态),在逻辑上是数据是被删除的,但数据本身是依然存在的,逻辑删除恢复的话只要修改is_deleted等类似的状态标示字段就可以了,但是表的数据量肯定会比物理删除增加了,并且查询时经常要考虑到is_deleted字段,对索引都会有影响。

2.DROP命令和DELETE命令的本质区别是什么?

答:DELETE命令是数据库操作语言(DML),DROP命令是数据库定义语言(DDL)DELETE命令只删除内容、释放空间但不删除定义,而DROP命令即可以对行数据进行删除,也可以对整表数据进行删除。

DROP命令是删除内容和定义,并释放空间。执行DROP命令,将使此表的结构一起删除。

3.利用INSERT、UPDATE和DELETE命令可以同时对多个表进行操作吗?

答:不可以。

五、实验要求

按要求完成,详细记录操作步骤,书写实验报告。所有实验环节均由每位学 生独立完成,认真记录操作过程,严禁抄袭他人实验结果。

六、实验总结

通过本次实验实现了对表的操作,对于插入(insert)修改(updata)删除(delete)有了更深刻的认识,在插入语句中有多种方式插入数据,可指定列,可多条数据同时插入。在修改语句和删除语句中不光要声明需要操作的表,还需要添加where条件。在实验中,无论是插入还是修改,涉及到切换中英文输入法后,容易把一些符号也输入成中文,造成语法错误,需要注意。

实验1 数据库数据定义 1、创建一个名为XSCJ的数据库,其初始大小为5MB,最大大小10MB,允许数据库自动增长,增长方式是按10%比例增长;日志文件初始为2MB,最大可增长到5MB,按1MB增长。 2、将以上XSCJ数据库的主数据文件的最大大小改为不限制。 3、参照教材82页例3.5、例3.6、例3.7分别建立Student、Course和SC,并录入数据库中相应元组。 4、分别采用SQL编程模式和设计模式修改Course,为其增加一列开课学期,数据类型自行定义。 5、为Course的Cname列建立一个唯一索引,索引名Cname_idx。 6、分离数据库XSCJ并拷贝文件至U盘保存好,用于下次实验;然后再将其附加上。 7、删除唯一索引Cname_idx。 8、删除基本Student。 实验2 数据查询 将上次实验课的学生成绩数据库(XSCJ)附加到SQL SERVER中,录入数据后做如下查询。 1) 查询选修了课程的学生的学号; 2) 查询全体学生的姓名和出生年份,并将列别名改为XM和CSNF; 3) 查询年龄在18到20(包括18岁和20岁)之间学生的学号、姓名和系。 4) 查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。 5) 用LIKE查询课程名为DB_ S的课程号和学分。 6) 查所有有成绩的学生学号和课程号。 7) 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄升序排列 8) 查询选修了课程的学生人数。 9) 计算1号课程的学生平均成绩。 10) 查询有2人以上(含2人)同学选修课程的课程号。 11) 查询1号课程的间接先修课。 12) 查询每个学生的学号、姓名、选修的课程名及成绩。 13) 找出每个学生高于他选修课程平均成绩的课程号。 实验3 数据更新和视图 将学生成绩数据库(XSCJ)附加到SQL SERVER中,完成如下实验任务。 1) 将一个新学生元组(学号:95007;姓名:张娜丽;性别:女;所在系:IS;年龄:18岁)插入到Student中。 2) 插入一条选课记录,插入一条选课记录( '95007','1 ')。 3) 对每一个系,求学生的平均成绩,并把结果存入数据库。 (建立一张,然后通过子查询将结果插入中。) 4)将全体学生的年龄增加一岁。 5)将信息系全体学生的成绩置零。 6)删除95001学生的记录。 7)删除信息系所有学生的选课记录。 8)建立计算机学生的视图CS_S。(视图中包括学号,姓名,年龄,系),并要求进行修改插入操作时仍需保证该视图只有计算机系的学生。(视图中包含的属性名称自拟) 9)向CS_S视图中插入分别插入两条信息,如果不能插入说明原因。 (学号:95002;姓名:李华华;所在系:IS;年龄:18岁) (学号:95003;姓名:王冬冬;所在系:CS;年龄:20岁) 10)利用CS_S视图完成以下查询。 查询计算机学生年龄小于20岁的学生(学号、年龄) 查询计算机系选修了2号课程的学生(学号、姓名)。 实验4 数据库的安全性 实验内容 将学生成绩数据库(XSCJ)附加到SQL SERVER中,完成如下实验任务。 (1)在SQL Server Management Studio中创建三个登录帐户:log1、log2、log3。 (2)利用前面建立的XSCJ数据库,用log1登录,能否操作XSCJ数据库?为什么? (3)将log1、log2、log3映射为XSCJ数据库中的用户。 注意:此映射步骤会为登陆名log1在XSCJ中自动建立同名数据库用户log1。log2和log3同理。 (4)用log1登录,能否访问XSCJ数据库?为什么? (5)授予log1、log2、log3具有对Student、Course、SC三张的查询权。并且log1有权将查询SC的权限授予其他用户。 (6)分别用log1、log2、log3登录,对上述三张执行查询。 (7)分别用log1、log2登陆,在查询分析器中执行以下语句,用来授予log3 对SC的访问权限,会出现什么情况? 实验5 数据库的完整性 将学生成绩数据库(XSCJ)附加到SQL SERVER中,完成如下实验任务。 (1)录入或变更数据,验证所建立的实体完整性规则及其违约处理。 (2)录入或变更数据,验证所建立的参照完整性规则及其违约处理。 (3)自行设定某些列,使得其不允许取空值。 (4)自行设定某些列,使得该列值不允许重复。 (5)自行设定某些列的默认值。 (6)用Check短语限定考试成绩的取值范围在0到100之间。 (7)为Student设计一个触发器,使得新增一个学生时,自动为其分配一个学号。 实验6 数据库编程
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小孙同学1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值