vlambda博客
学习文章列表

MySQL5.7之DML和DQL的应用演示

大家好,我是anyux。上一节简单介绍了SQL语句的DDL(数据定义语言)、DCL(数据控制语言)。本节是对于SQL语句DML(数据操作语言)、DQL(数据查询语言)进入演示操作。

DML的应用

数据操作语言DML主要有三种形式:

   1.插入:INSERT

   2.更新:UPDATE

   3.删除:DELETE

以下操作基于已经创建的zabbix数据库及库下的stu表,请先准备。也可联系作者获取相应sql文件

 #-----偷懒插入数据方法

 insert  `zabbix`.`stu` values(1,'zs',18,'m',now());
 #-----最规范插入数据方法
 insert into `zabbix`.`stu`(id,name,age,sex,intime) values(2,'ls',19,'m',now());
 #-----针对性录入数据
 insert into `zabbix`.`stu`(name,age,sex) values('ww',11,'m');
 #-----一次性录入多行数据
 insert into `zabbix`.`stu`(name,age,sex) values('aa',11,'m'),('bb',12,'f'),('cc',13,'m');
 
 update
 #-----更新操作
 update `zabbix`.`stu` set name='zhangfeifei' where id=10;
 
 delete
 #-----删除操作
 insert into `zabbix`.`stu` (name,age,sex) values('dd',20,'f');
 select * from `zabbix`.`stu`;
 delete from `zabbix`.`stu` where name='dd' and age =20 and sex='f';

MySQL5.7之DML和DQL的应用演示

业务数据应用

delete 和truncate删除区别

  1. delete:DML操作,是逻辑性质删除,逐行删除,速度慢

  2. truncate:DDL操作,将表中的数据页进行清空,速度快

 #----- 逻辑删除
 delete from `zabbix`.`stu`;
 #----- 数据清空
 truncate table `zabbix`.`stu`;

数据伪删除

一般地,使用update替代delete,最终保证业务查找不到

 #-----增加数据列
 alter table `zabbix`.`stu` add state tinyint not null default 1;
 #-----查看数据表状态
 select * from `zabbix`.`stu` where state=1;
 #-----使用update替换delete
 update `zabbix`.`stu` set state=0 where id=6;
 #-----查看数据表状态
 select * from `zabbix`.`stu` where state=1;

MySQL5.7之DML和DQL的应用演示


DQL的应用

select语法简单应用

查看当前数据库端口select @@port;+--------+| @@port |+--------+| 3306 |+--------+
查看当前数据库应用程序目录select @@basedir;+---------------------+| @@basedir |+---------------------+| /application/mysql/ |
查看当前数据库应用程序服务idselect @@server_id;+-------------+| @@server_id |+-------------+| 6 |+-------------+控制MySQL 磁盘写入策略select @@innodb_flush_log_at_trx_commit;+----------------------------------+| @@innodb_flush_log_at_trx_commit |+----------------------------------+| 1 |+----------------------------------+查看MySQL应该支持的sql语法,对数据的校验等等select @@sql_mode;+-------------------------------------------------------------------------------------------------------------------------------------------+| @@sql_mode |+-------------------------------------------------------------------------------------------------------------------------------------------+| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |+-------------------------------------------------------------------------------------------------------------------------------------------+

其实数据库中自带了很多的内置函数,比如查看当前所在数据库,相当于Linux的pwd命令

 -----查看当前数据库

select database();

 -----查看当前时间
 select now();

以上select查询都简单的使用,可以被其他工具替代。下面是select语句主要的使用场景

select通用语法(单表)

所谓select通用语法是指,select语法通过配合其他查询子句。如select .... from

语法构成

 select
 from
 where 条件
 group by 条件
 order by 条件
 limit x,y

环境说明

此处需要一个world.sql文件,导入到数据库中,需要文件的同学,可以联系作者

select配合from子句应用


查询表中所有的信息(生产中几乎是没有这种需求的)

 use world;

 select id,name,countrycode,district,population from city;

MySQL5.7之DML和DQL的应用演示

 #-----简便写法
 select * from city;
 #-----查询表中 name 和 population的值
 select name,population from city;

MySQL5.7之DML和DQL的应用演示

select配合where子句应用


查询中国所有的城市名称和人口数

 #-----select 列,列,列 from 表 where 过滤条件
 
 select name,population from city where countrycode='CHN';

MySQL5.7之DML和DQL的应用演示

世界上小于100人的城市

 #-----where配合比较判断查询(> < >= <=)

 select name,population from city where population<100;

MySQL5.7之DML和DQL的应用演示

查询中国人口数量大于10万的城市和人口

 #-----where配合逻辑连接符(and or not)
 select name,population from city where countrycode='CHN' and population>100000;

MySQL5.7之DML和DQL的应用演示

查询中国或美国的城市名和人口数

 select name,population from city where countrycode='CHN' or countrycode="USA";

MySQL5.7之DML和DQL的应用演示

查询人口数量在50万到60万之间的城市名和人品数

 #-----查询人口数量在50万到60万之间的城市名和人品数
 select name,population from city where population > 500000 and population < 600000;
 select name,population from city where population between 500000 and 600000;

MySQL5.7之DML和DQL的应用演示

where配合like语句,实现模糊查询

 #-----where配合like语句,实现模糊查询
 #-----查询contrycode中有C开头的城市信息
 #-----注意,不要出现%C%这种情况,这样做不走索引,功能上可以实现,但对性能影响巨大。如果业务中有大量模糊查询的需求,可以使用ES来替代
 select * from city where countrycode like 'C%';

查询中国或美国的城市信息

 #-----where配合in语句
 select name,population from city where countrycode='CHN' or countrycode='USA';
 select name,population from city where countrycode in ('CHN',"USA")

本节主要是对于SQL语句的DML(数据操作语言)和DQL(数据查询语言)进行演示。其中如有不足还各位同学指出。下一节将对DQL的select操作进行更多深入的演示。