MySQL入门学习
MySQL常用命令
查看MySQL版本 mysql --version 创建数据库 created database 库名 查看所有数据库 show database 进入数据库 use 库名 查询当前使用的数据库 show database() 查看当前库中所有表 show tables 查看其他库中的表 show tables from <database name> 查看表结构 desc 表名 查看表创建语句 show created table <table name> 终止一条语句 ctrl + c 退出MySQL exit
MySQL查询语句
select 字段 from 表名 where 条件 group by 分组字段 order by 排序字段
简单查询
查询表中所有数据select 字段名 from 表名
条件查询
select 字段名 from 表名 where 条件 where关键字必须放在表名后面,条件支持如下运算符
运算符 | 说明 | 示例 |
---|
= | 等于 | select * from user where name = 'jack' | <> 或 != | 不等于 | select * from user where name <> 'lucy' | < | 小于 | select * from user where age <15 | <= | 小于等于 | select * from user where age <=15 | > | 大于 | select * from user where age >15 | >= | 大于等于 | select * from user where age >=15 | between…and… | 两个值之间 | select * from user where age between 10 and 15 | is null | 为null(is not null不为null) | select * from user where job is null | and | 并且 | select * from user where age >15 and job = 'coding' | or | 或者 | select * from user where name = 'jack' and name = 'lucy' | in | 包含,相当于多个or | select * from user where name in ('jack','lucy') | not | not取非,可以用在is null 和in中 | select * from user where job is not null | like | 模糊查询,支持% _,%匹配任意一个字符,下划线,一个下划线匹配一个字符 | select * from user where name like ‘_a%' 匹配名字中第二个字母为a的 |
排序查询
使用字段名排序
select * from user order by age desc 通过年龄降序排序 将需要排序的字段放在order by 后面可以实现排序查询 在字段后面添加desc 表示降序,不写默认为升序,可以写asc 表示升序 可以写多个字段,表示通过第一个字段排序,如果第一个字段相同,则使用第二个字段排序
使用字段所在位置排序(不常用)
select name,age,job from user order by 1 表示使用第一个字段进行排序,但是如果前面的字段换了位置,或者换一个字段,这个排序就不是按照我们所想的方式排序了。
分组查询
select * from user group by job 通过工作分组 将字段放在group by 后面可以实现分组查询,
单行处理函数
单行处理函数表示对每一行的数据都使用这个函数来处理其中的数据, 可以使用在select 后面,表示返回的结果需要通过函数处理 也可以使用在 where后面,表示通过该函数处理后的结果需要匹配某些条件
lower(字段)
将括号里的字段转换成小写
upper(字段)
将括号里的字段转换成大写
substr(字段,起始下标,截取长度)
截取字符串,起始下标从1开始
length(字段)
获取当前字段中数据的长度
trim(字段名)
去除前后空格
str_to_date(字段)
将字符串转换成日期类型(注:该字符串的格式需要匹配到某一种日期格式)
dateformat(字段,表达式)
将日期通过表达式转换成字符串 常见表达式%Y-%m-%d %H:%i:%s 可以任意排列组合 %Y 年 %m 月 %d 日 %H 时 %i: 分 %s 秒
now()
获取当前时间
format(字段名,小数位)
格式化数字,保留几位小数
round(字段名)
将该字段四舍五入
rand()
生成 0到1的随机数
case 字段名 when 条件 then 结果 else 没有匹配到条件返回的结果 end
匹配该字段,如果满足条件,然后then中的结果,如果没有匹配到,则返回else中的结果 when … then … 可以写多个 语句必须有end结束符
ifnull(字段,默认值)
判断该字段中的数据是否为null,如果时null则返回默认值
多行处理函数
多行处理函数又叫做聚合函数,如果在没有分组的情况下使用,所得到的数据将只有一条 需要group by 之后才能,否则得到得数据将没有意义 多行处理函数不能放在where 后面使用,因为sql语句的执行顺序为,from --> where --> group by --> select 可以将函数放在having 后面使用
常用的多行处理函数
函数 | 说明 |
---|
count | 取得记录数 | sum | 求和 | avg | 平均值 | max | 最大值 | min | 最小值 |
select语句的执行顺序
select 字段
from 表名
where 条件
group by 字段
having 条件(聚合函数条件,需要个group by 同时出现)
order by 字段
以上语句的执行舒徐
- 首先执行 where语句过滤的原始数据
- 执行
group by 进行分组 - 执行
having 对分组数据进行操作 - 执行
select 选出数据 - 执行
order by 排序 原则:能使用where 中过滤的数据,尽量在where 中过滤,效率较高,having 专门用来过滤分组之后的数据
连接查询
通常数据库中的一张表无法完美的存放我们想要的数据,所以数据会在A表中存一部分,在B表中存一部分。 这样做一方面可以将数据存放完成; 另一方面可以将多条数据中相同的部分存放在同一张表中,从而节省数据库的空间 此时我们想要同时获取两张表的数据,就需要用到连接查询
SQL92
select * from user,class 在from 关键字后面写需要关联的两个或多个表可以实现连接查询,但是这样查询出来的结果会是两个表数据量的乘积(笛卡尔积查询) 所以需要在where 后面增加条件,表示两张表的关联条件(这里的条件可以是等于,也可以是范围) select * from user,class where user.class_id = class.id
SQL99
上面是sql92 中的做法,这样有个弊端, 如果我们想在连接查询的结果再进行条件过滤的话,所有的查询条件都会出现在where 后面,这是的sql语句阅读起来会相对困难 所有在SQL99 中使用了join 关键字来进行分离,使用 on 关键字来表示两张表的关联关系
select *
from user
join class
on user.class_id = class.id
MySQL事务控制
事务的四个特性
A: 原子性 说明事务的最小的工作单元。不可再分 C:一致性 所有事务要求,在同一个事务当中,所有惭怍必须同时成功,或者同时失败,以保证数据的一致性。 I:隔离性 A事务和B事务之间具有一定的隔离。 D:持久性 事务最终结束的一个保证。事务提交,就相当于将没有保存到硬盘上的数据保存到银盘上!
事务隔离性
事务和事务之间的隔离级别有哪些?从低到高依次是 读未提交:read uncommitted 事务A可以读取事务B未提交的数据63333333 读已提交:read committed 可重复度:repeatable read 序列化:serializable
常用命令
开启事务控制 start transaction 提交事务 commit 回滚 rollback
未完
|