数据库实验二 数据库表的数据插入、修改、删除操作
- 一、实验目的
- 二、设计性实验
- 三、观察与思考
一、实验目的
1.掌握MySQL数据库表的数据插入、修改、删除操作SQL语法格式
2.掌握数据表的数据的录入、增加和删除的方法
二、设计性实验
某超市的食品管理的数据库的Food表,Food表的定义如表所示,请完成插入数据、更新数据和删除数据。
按照下列要求进行操作:
(1)采用3种方式,将表的记录插入到Food表中。
方法一:不指定具体的字段,插入数据: ‘QQ饼干’,‘QQ饼干厂’,2.5,‘2008’,3,‘北京’。
INSERT INTO Food VALUES(foodid,‘QQ饼干’,‘QQ饼干厂’,2.5,‘2008’,3,‘北京’);
方法二:依次指定food表的字段,插入数据: ‘MN牛奶’,‘MN牛奶厂’,3.5,‘2009’,1,‘河北’)。
INSERT INTO Food VALUES(2,‘MN牛奶’,‘MN牛奶厂’,3.5,‘2009’,1,‘河北’);
方法三:同时插入多条记录,插入数据:
‘EE果冻’,‘EE果冻厂’,1.5,‘2007’,2,‘北京’,
‘FF咖啡’,‘FF咖啡厂’,20,‘2002’,5,‘天津’,
(‘GG奶糖’,‘GG奶糖’,14,‘2003’,3,‘广东’;
分别写出相应语句。
INSERT INTO Food (foodid,Name,Company,Price,Product_time,Validity_time,address)
VALUES(3,‘EE果冻’,‘EE果冻厂’,1.5,‘2007’,2,‘北京’),
(4,‘FF咖啡’,‘FF咖啡厂’,20,‘2002’,5,‘天津’),
(5,‘GG奶糖’,‘GG奶糖厂’,14,‘2003’,2,‘广东’);
(2)将“MN牛奶厂”的厂址(address)改为“内蒙古”,并且将价格改为3.2。
UPDATE Food SET address=‘内蒙古’,Price=3.2 WHERE Company=‘MN牛奶厂’;
(3)将厂址在北京的公司的保质期(validity_time)都改为5年。
UPDATE Food SET Validity_time=5 WHERE address=‘北京’;
(4)删除过期食品的记录。若当前时间-生产年份(producetime)>保质期(validity_time),则视为过期食品。
DELETE FROM food WHERE Validity_time<(2023-Product_time);
(5)删除厂址为“北京”的食品的记录。
DELETE FROM Food WHERE address=‘北京’;
三、观察与思考
1.对于删除的数据,如何实现”逻辑删除“(即数据库中的数据不删除,给用户的感觉是删除了)?
将删除标记设置默认值(例如0),将唯一字段与删除标记添加唯一键约束。当某一记录需要删除时,将删除标记置为NULL。
由于NULL不会和其他字段有组合唯一键的效果,所以当记录被删除时(删除标记被置为NULL时),解除了唯一键的约束。此外该方法能很好地解决批量删除的问题(只要置为NULL就完事了),消耗的空间也并不多(1位 + 联合索引)。
2.DROP命令和DELETE命令的本质区别是什么?
-
触发条件不同
delete语句是数据库操作语言(dml),这个操作会放到rollbacksegement中,在事务提交后生效,执行时触发相应的trigger。drop是数据库定义语言(ddl),操作立即生效,原数据不放到rollbacksegment中,不能回滚,操作不触发trigger。 -
用法不同
delete只删除内容、释放空间但不删除定义,而delete即可以对行数据进行删除,也可以对整表数据进行删除。drop是删除内容和定义,并释放空间。执行drop语句,将使此表的结构一起删除。 -
执行速度不同
drop的执行速度大于delete。delete的执行速度小于drop。
3.利用INSERT、UPDATE和DELETE命令可以同时对多个表进行操作吗?
不可以,只能对单表进行操作