2.5: 操作mysql中的数据(二)

我们上一节课已经讲到了怎么插入数据,以及什么是事务等,那我们接下来就要开始讲怎么更新和删除数据了。

我所讲的这些内容,都是最基本最常用的一些东西,大家一定要掌握,这些如果都掌握不了,那么后面就没法学了。

上次我们新建了表dm_user_info, 假如我们仔细检查之后,发现某些数据有错误,那么我们就要把这些数据修改正确了,
此时sql的更新语句就非常有用了。
那么我们先看一下更新语句的语法:
update 表名 set 列名称1=列名称1的值, 列名称1=列名称1的值
[where 列名称 = 值]
知道语法之后,我们就来做一下实验。
例如我们要把day_id为20170831 , user_id为00ef3f33f221260fdfsd的这条记录的pv更新为5

那么就应该写:
update dm_user_info set pv = 5 where day_id = 20170831 and user_id ='00ef3f33f221260fdfsd';
然后
commit;
这些地方有一些值得提的就是语法,set后面可以跟多个更新的字段的, where条件后面也是可以跟多个限制条件的。

然后我们查询一下数据是否已经发生了变化

select * from dm_user_info;
当需要更新多个列的时候 set后面采用逗号分开, where条件有多个限制条件的话,可以采用and / or连接
update dm_user_info set pv = 5 , os = 'iphone' where day_id = 20170831 and user_id ='00ef3f33f221260fdfsd';


那么where条件后面到底该怎么限制数据呢? 我的过滤条件该怎么添加呢?

其实有几种情况

运算符     描述
= 等于
<> 不等于。注释:在 SQL 的一些版本中,该操作符可被写成 !=
> 大于
< 小于
>= 大于等于
<= 小于等于
between and 在某个范围内 , 包含头和尾
like 搜索某种模式
in 指定针对某个列的多个可能值
not int 和in相反,指定某个列不包含这些值

我接下来做一些例子演示, 大家一看也就明白了:

这里就演示一个大于,其他的小于,大于等于 都是一样的
update dm_user_info set pv = 5 , os = 'iphone' where day_id>20170901;
between and 就是代表属于这个范围内的数据
update dm_user_info set pv = 5 , os = 'iphone' where day_id between 20170831 and 20170903;
like代表模糊匹配,%代表通配符
update dm_user_info set pv = 5 , os = 'iphone' where os like '%ip%';
in 和not in 代表包含和不包含
update dm_user_info set pv = 5 , os = 'iphone' where sotre_id in(1351,1478);
同理not in如下:
update dm_user_info set pv = 5 , os = 'iphone' where sotre_id not in(1351,1478);
以上的知识同学们应该都能够掌握了,讲完了更新数据,那么我们接下来讲一下删除数据.

同样的套路,我们先来看一下删除数据的语法:
DELETE FROM 表名称 
[WHERE 列名称 = 值]

此处的where条件和update中的where条件是一模一样的,没有任何区别,也可以跟多个条件限制, 同样也是通过and 或者or连接.


删除20170831这一天的数据
delete from dm_user_info where day_id=20170831;
delete from dm_user_info where day_id in (1351,1478);
delete from dm_user_info where os like '%ip%';
这些都是一模一样的,没有任何区别,我就不再一一演示了。

以上的删除语句,都是做了限制条件的,那么如果不做限制呢?
delete from dm_user_info;
此时就是删除了该表的所有数据了。
同样的,我们上次说了事务的触发条件,insert, update , delete都会触发,因此做了以上操作的时候,都需要做commit操作。
我们再补充一个知识点,当我们数据量特别大的时候,其实做delete操作的时候,其实都是非常非常慢的。
如果我们有一个需求,需要删除表中的所有数据,我们除了使用delete from 表名称 这种方式外, 
我建议使用另外一种方式: truncate 表名称, 

我这里做一个演示, 

truncate dm_user_info;
那么我这里又有一个疑问了,delete 和truncate之间有什么区别呢?  
这里我先留给大家先去思考,这是初级面试中会经常问的问题 , 下一节课我再来讲两者之间的区别。

猜你喜欢

转载自blog.csdn.net/zhoushuilin/article/details/79362916
2.5