MySQL的灵魂三问

227 阅读4分钟

本文正在参加「技术专题19期 漫谈数据库技术」活动 ”

MySQL灵魂三问:

什么是mysql?

为什么学mysql?

怎么样掌握mysql(关系型数据库)?

作为一名测试人,掌握数据库常用的操作不可缺少,接下来我们慢慢看这三个问题:

一、什么是MySQL:它是一个存放数据的仓库

二、为什么学MySQL:企业中搭建被测试环境(依赖数据库) ;测试需要用到数据库

三、怎么掌握MySQL:只要掌握 SQL(Struct query language结构化)语言,几乎可以操作 所有的关系型数据库 分成三个部分:

  1. DDL语言---》数据定义语言(建立库 建立表)
  2. DML语言==》数据操作语言(数据增删改)+DQL(数据查询语言)
  3. DCL语言===》数据控制语言

本篇文章主要讲述常用的sql语法:

1、数据库的操作:从创建、查看、删除开始

1、创建数据库
create  database 数据库名 default character set = 'utf8';;  
#创建数据库
#任何名字  字母数字 下划线组成 数字不要开头  
create database    aaa default character set = 'utf8';;

2、 查看当前数据库
show databases;
3、使用数据库(建表之前使用的语句)
use aaa; 
4、删除数据库
drop database    aaa;

2、字段类型

image.png

例子:学生表
例子:需求在aaa 数据库中建立 student学生表
包含学号  姓名 考试分数  性别    入学日期  生日

#注意指定数据库 运行 use aaa; 
# 注意任何符号都是英文 
# 注意男女 两边英文单引号
# 注意最后一个字段后面不要逗号
create table student(
   id int,
   name varchar(20),
   grade float,
   sex enum('男','女'),
   ruxueriqi    date,
   birthday  datetime
);

3、数据约束

image.png

例子2:需求在aaa 数据库中建立 student2学生表
包含学号 主键 姓名  非空 考试分数 默认值   性别    入学日期  生日
# 注意多个约束 空格隔开
create table student222(
   id int PRIMARY key auto_increment,
   name varchar(20) not null unique ,
   grade float default 0,
   sex enum('男','女'),
   ruxueriqi    date,
   birthday  datetime
);

下面有一段MySQL 查询语句梳理几个相关语法知识。

案例代码:

`select a.blastid,d.apptime,a.charge_approve,
            a.blast_batch,
            a.plan_blast_time,
            a.exe_plan_id,
            a.import_flag,
            a.rig_type,.......
            case when (select "count"(*) from bla_geology_info geo where a.blast_id=geo.blast_id and  geo.delete_flag=0)>0
                then 'true' else 'false'  
    END as isShowFlag
    from bla_blast_info a
    left join exe_plan_month b
    on a.exe_plan_id = b.exe_plan_id
    left join sys_user c
    on a.dynamite_user = c.user_id
    left join (select blast_id,isagree,idea,create_time as app_time from bla_charge_approve where delete_flag = '0') d
    on a.blast_id = d.blast_id
    WHERE a.blast_type = '1' AND a.blast_status > '3' AND a.blast_status < '8' AND a.charge_approve > '1' AND a.delete_flag = '0' ORDER BY cast(a.charge_approve  as numeric)  ASC , d.app_time DESC , a.create_time DESC`

常用的sql语法

1

查询语句 select xxxx  from 表名 ,表示从哪个表进行查询。

其中select 后面内容以“,”分割。

2

select xxxx  from 表名 别名,表示这个表用别名替代,如上个语句中的a、b、c等。

3

case when then xx,else xxx ,end  as  isShowFlag表示符合 when 条件执行 then 后面语句,否则执行 else 后面语句。

eg 案例中case when (select "count"(*) from blageologyinfo geo where a.blastid=geo.blastid and geo.delete_flag=0)>0

then 'true' else 'false' 表示符合条件的爆破量进行上传

end  as  isShowFlag 起的查询语句别名,后续调用的时候使用别名名称即可。

4

left join 左连接 ,表1左连接表2,以左为主,表示以表1为主,关联上表2的数据,查出来的结果显示左边的所有数据,然后右边显示的是和左边有交集部分的数据。

image.png

一句话的意思是:先取交集,再关联到左表。

引申整理出几个连接的常用含义及区分 ,如下表所示:

image.png

5

查询语句 select xxxx from 表名 where 查询条件。

where 查询条件后面接所有你要查询的内容,用and连接,这里需要注意order by 使用

order by 1,2,3,4 ,先1排序,1相同的情况下按照2、3、4排序。

6

cast ()数据类型转换函数,文中cast(a.charge_approve as numeric) 表示将字段charge_approve 转换为数字型,以前是字符类型,字符类型的字段不可以进行排序。

7

a.exe_plan_id = b.exe_plan_id 表示 a表的exe_plan_id字段和b表的exe_plan_id 字段进行绑定。

可以这么理解:只有两个表绑定后才能进行相关的查询操作。

总结通用模板:

Select 字段名1,字段名2  case when  条件 then 执行语句  else 执行语句 end as 别名 from 表名 别名 left join on 表连接(a.exe_plan_id = b.exe_plan_id)Where 查询条件(d.app_time DESC

(左右滑动查看完整代码)