当前位置:首页|资讯

单元4 数据操作 4-3 数据删除

作者:老徐的CS自留地发布时间:2024-10-04

实验名称

数据删除

实验类型

验证性/设计性

日期


实验目的




实验内容和步骤

实验环节4,以数据操作(即数据插入,数据修改和数据删除为主要内容),相对于第三单元(数据定义)来说,较为简单;其是在第三单元的基础之上的工作。因此,这里是假设第三单元的数据库和表均已创建成功!

希望大家能够知悉!

0 实验预备

考虑到换教室了,那下午的删除实验可能就需要再重新创建库和表!,若没有换教室,那就省去“实验准备,直接进入1步骤!

请问,还记得如何删除数据库和删除表吗?

干脆一下删除原来的bookstore库吧,

问一句:删除数据库A了,那数据库A中的表还有没有呢?请试一下啊!

(1)创建bookstore数据库,先看一下有没有该数据库

show databases;

若没有bookstore数据库,那就创建吧!

create database bookstore;

再show一下,看创建是否成功哦!

use bookstore;

然后,开始创建表啦!这里,依据教材,先创建一个book表吧!

CREATE TABLE  book (    图书编号  char(10)   NOT NULL  PRIMARY KEY,    图书类别  varchar(20)   NOT NULL  DEFAULT  '计算机',    书名       varchar(40)   NOT  NULL ,    作者       char(10)     NOT  NULL ,    出版社     varchar(20)   NOT  NULL ,    出版时间   date           NOT  NULL ,    单价      float(5,2)       NOT  NULL ,    数量      int(5),      折扣      float(3,2) ,      封面图片  blob ) ENGINE=InnoDB; CREATE TABLE  sell  (  订单号 int(0) NOT NULL AUTO_INCREMENT,  用户号 char(18) NOT NULL,  图书编号 char(20) NOT NULL,  订购册数 int(0) NOT NULL,  订购单价 float(5, 2) NOT NULL,  订购时间 datetime(0) NOT NULL,  是否发货 varchar(10)   DEFAULT NULL,  是否收货 varchar(10)   DEFAULT NULL,  是否结清 varchar(10)   DEFAULT NULL,  PRIMARY KEY (`订单号`) ) ENGINE = InnoDB ;



此时,你可以查看一下,看book表是否创建成功;若成功,

也别急,应该是学习删除数据操作,所以,最好是先放入一些数据,才能练习!

INSERT INTO book VALUES ('TP.2462', '计算机', '计算机应用基础', '陆大强', '清华大学出版社', '2018-10-19', 45.00, 45, 0.80, NULL); INSERT INTO book VALUES ('TP.2463', '计算机', '计算机网络技术', '林力辉', '清华大学出版社', '2020-10-16', 25.50, 31, 0.80, 'D\\pic\\ll.jpg'); INSERT INTO book VALUES ('TP.2525', '计算机', 'PHP高级语言', '王大卫', '中国青年出版社', '2020-06-20', 33.25, 50, 0.80, 'D:\\pic\\js.jpg'); INSERT INTO book VALUES ('TP.6625', '计算机', 'JavaScript编程', '谢为民', '中国青年出版社', '2020-08-05', 33.00, 60, 0.80, NULL); INSERT INTO book VALUES ('Ts.3010', '数据库', 'ORACLE', '张小刚', '北京大学出版社', '2019-08-02', 28.00, NULL, NULL, NULL); INSERT INTO book VALUES ('Ts.3035', '数据库', 'MYSQL数据库', '李刚', '北京大学出版社', '2020-12-26', 20.00, 500, 0.80, 'D:\\pic\\jp.jpg'); INSERT INTO book VALUES ('Tw.1283', '网页设计', 'DW网站制作', '李华', '人民邮电出版社', '2015-10-01', 27.00, NULL, NULL, NULL); INSERT INTO book VALUES ('Tw.2562', '网页设计', 'ASP网站制作', '胡莉惠', '中国青年出版社', '2020-07-24', 30.50, 50, 0.80, NULL); INSERT INTO book VALUES ('Tw.3020', '网页设计', '网页程序设计', '刘辉', '清华大学出版社', '2019-02-15', 25.00, NULL, NULL, NULL);

INSERT INTO sell VALUES (1, 'C0132', 'TP.2462', 13, 20.00, '2020-11-14 12:13:49', '已发货', NULL, NULL); INSERT INTO sell VALUES (2, 'D1963', 'TP.2463', 3, 31.50, '2020-11-21 12:25:12', '已发货', NULL, NULL); INSERT INTO sell VALUES (3, 'D1963', 'TP.9501', 6, 23.45, '2020-03-26 12:25:23', '已发货', '已收货', NULL); INSERT INTO sell VALUES (4, 'C0138', 'TP.2463', 10, 23.50, '2020-08-01 12:13:49', '已发货', '已收货', '已结清'); INSERT INTO sell VALUES (5, 'C0138', 'TP.9504', 133, 33.50, '2020-08-01 12:13:49', NULL, NULL, NULL); INSERT INTO sell VALUES (6, 'A3013', 'Ts.3010', 4, 89.00, '2020-08-20 00:00:00', NULL, NULL, NULL); INSERT INTO sell VALUES (7, 'C0138', 'Tw.2562', 43, 30.00, '2020-11-08 12:13:49', '已发货', NULL, NULL); INSERT INTO sell VALUES (8, 'C0138', 'Ts.3010', 5, 45.50, '2020-11-21 00:00:00', NULL, NULL, NULL); INSERT INTO sell VALUES (9, 'C0132', 'Tw.3020', 6, 23.00, '2020-11-28 18:23:35', '已发货', '已收货', NULL);

看一下两个表都有数据了,那就OK啦

✍️练习:请问,如何看一下这两个表已经有数据了呢?

则预备工作完成!

1  delete 删除数据

【1】单表数据删除行

先看一下book表的内容吧

select * from book;

那开始吧!

功能:删除数量少于30本的书!

DELETE FROM book        WHERE 数量<30;

这说明,NULL,空,并不等于没有!那

DELETE FROM book        WHERE 数量<40;

请问,查看是否删除成功咋看?用啥命令呢?

确实,没有数量40以下的书了!

✍️布置一个小练习吧!

在上面book表的基础上,请删除书名为'网页设计'的书吧!请自己做一下,并验证删除语句是否写的正确!

(完成后,让我看看吧!!!!)

【1】从多个数据删除行

两个表,一个book,一个sell;

场景:删除book表中的一本编号为“TP.2462"的书,那,相应的,把该书所对应的订单也给删除了吧!

如何写代码呢?

DELETE sell,book    FROM sell,book        WHERE sell.图书编号=book.图书编号            AND book.图书编号='TP.2462';

那看一下是否有变化呢?

那自己练习一下,

✍️练习:如何查看sell表格中,那个图书编号为'TP.2462'数据是不是已经被删除了呢?

或者换一种delete语法,与之前的删除语句,虽然写的方式不同,但效果是一样的!

DELETE    FROM sell,book    USING sell,book        WHERE sell.图书编号=book.图书编号            AND book.图书编号='Tw.3020';

2 Truncate table 语句删除表数据

使用delete语句删除数据时,删除一行,系统会在事务日志中为所删除的行,进行记录,当删除数据多,必然会比较慢,那用truncate命令,很快,因此,被称为清除表数据语句。

这里呢,因为涉及到事务等知识点,暂时,先不讲太多,等后面讲完了事务,我们可以结合此处,再讲解!

先讲一点点:

drop,delete与truncate的区别

  • drop直接删掉表;

  • truncate删除的是表中的数据,再插入数据时自增长的数据id又重新从1开始

  • delete删除表中数据,可以在后面添加where字句。

具体来说:

1.delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存,以便进行进行回滚操作。

2.执行速度一般来说:drop>truncate>delete

3.delete语句是数据库操作语言(dml),这个操作会放到 rollback segement 中,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发。
4.truncate、drop 是数据库定义语言(ddl),操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发trigger。

5.truncate语句执行以后,id标识列还是按顺序排列,保持连续;而delete语句执行后,ID标识列不连续

附加:涉及事务、触发器等知识点,可以先不看

若有余力,可以先试下下面的案例,涉及到事务的概念啦!

以book表为例

select * from book;

start transaction;

使用delete语句删除book表中所有数据

delete from book;

查看一下book表吧

select * from book;

看,数据已经全部被删除啦!

那刚才说了,delete,如果使用了事务,那还可以恢复呢!

那如何恢复呢,就让事务 回滚,即滚回来!

如何做呢?

rollback;

那数据回来了没有呢?

查看就知道啦!

哇,太神奇啦!对吧!这就是事务+delete的神奇之处!

那如果用truncate删除表数据,可就不能与事务结合起来恢复数据啦!

至此,数据删除操作搞定!




Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1