目录
1.Update
案例1:将孙悟空同学的数学成绩变更为 80 分
案例2:将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
案例3:将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
案例4:将所有同学的语文成绩更新为原来的 2 倍
2.Delete
案例1:删除孙悟空同学的考试成绩
案例2:删除整张表
3.截断表
在了解操作之前我们先创建出一个用于案例的表。
CREATE TABLE exam_result (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL COMMENT '同学姓名',
chinese float DEFAULT 0.0 COMMENT '语文成绩',
math float DEFAULT 0.0 COMMENT '数学成绩',
english float DEFAULT 0.0 COMMENT '英语成绩'
);
再向表中插入数据,语句都是我们之前接触过的。
INSERT INTO exam_result (name, chinese, math, english) VALUES
('唐三藏', 67, 98, 56),
('孙悟空', 87, 78, 77),
('猪悟能', 88, 98, 90),
('曹孟德', 82, 84, 67),
('刘玄德', 55, 85, 45),
('孙权', 70, 73, 78),
('宋公明', 75, 65, 30);
1.Update
案例1:将孙悟空同学的数学成绩变更为 80 分
首先我们先查看所有人的数学分数,可以看到孙悟空的数学成绩为78。
然后使用update来更新分数为80;
update exam_result set math=80 where name ='孙悟空';
可以看到孙悟空的成绩已经更新为80;
案例2:将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
首先我们先筛选出未更新前的成绩
接下来使用update ..set...更新
update exam_result math set math=60,chinese = 70 where name='曹孟德';
可以看到成绩已经更新为案例要求的分数。
案例3:将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
由于题目的要求非常长2,我们不妨一步一步来。
先筛选出总成绩倒数先前三的同学
select name,math + chinese+english as total from exam_result order by total limit 3;
因为我们不确定再给他们的数学成绩加上三十分之后倒数前三还是不是他们三个人,所以我们先如上操作。
我们再给这几个人的数学成绩加上30分
update exam_result set math=math+30 order by chinese+math+english asc limit 3;
可以看到在给原先的倒数前三数学成绩加上三十分后,曹孟德现在已经不在倒数前三的位置了。
也就是说我们可以在order by后可以继续对数据进行更改。
案例4:将所有同学的语文成绩更新为原来的 2 倍
先观察没有更新前的语文成绩
对其更新
update exam_result set chinese = chinese * 2;
注意:这个例子是提醒我们使用时在没有使用where筛选条件的情况下慎用update,不然会使所有的数据进行更新!
2.Delete
案例1:删除孙悟空同学的考试成绩
首先查看孙悟空的考试成绩。
再使用delete语句进行删除
delete from exam_result where name = '孙悟空';
再次查询时可以看到孙悟空的考试成绩已经成为了empty。
案例2:删除整张表
在操作之前我们要明白的是MySQL中的表和表中的数据是不一样的,delete操作主要是删除表中的数据,表的结构是不受影响的。
所以第一步先准备测试用的表
CREATE TABLE for_delete (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20)
);
插入一些数据
INSERT INTO for_delete (name) VALUES ('A'), ('B'), ('C');
接下来就删除这个表的内容
delete from for_delete
接下来我们继续查看这个表的结构时会发现这个表的结构依然存在
并且我们再向其中插入数据
可以看到我们之前设置的id为自增长键并不会重置。
3.截断表
同样的再操作案例之前先简单创建一个可以操作的表
CREATE TABLE for_truncate (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20)
);
插入一些数据
INSERT INTO for_truncate (name) VALUES ('A'), ('B'), ('C');
查看表结构
此时我们对表进行truncate操作
truncate for_truncate;
再次查看表结构
这次我们可以发现自增长键的计数器已经没有了
我们再向里插入数据:
insert into for_truncate (name) values ('E');
可以看到我们的自增长键被重置为1了,而delete操作不会重置,这就是两个操作的区别。