跳至主要內容

Mysql基础知识

Alooc...大约 6 分钟数据库Mysql数据库Mysql

1.Mysql环境

主要的目录结构

2. 基本的select语句

  • sql的分类:
    • DQL: select
    • DDL: create, drop, alter
    • DML: update, insert, delete
    • DCL: grant, revoke, commit, rollback, savepoint
select...from...join...on....where....and...or...group by...having....order by...



#方式1:
SELECT ...,....,...
FROM ...,...,....
WHERE 多表的连接条件
AND 不包含组函数的过滤条件
GROUP BY ...,...
HAVING 包含组函数的过滤条件
ORDER BY ... ASC/DESC
LIMIT ...,...
#方式2:
SELECT ...,....,...
FROM ... JOIN ...
ON 多表的连接条件
JOIN ...
ON ...
WHERE 不包含组函数的过滤条件
AND/OR 不包含组函数的过滤条件
GROUP BY ...,...
HAVING 包含组函数的过滤条件
ORDER BY ... ASC/DESC
LIMIT ...,...
#其中:
#(1)from:从哪些表中筛选
#(2)on:关联多表查询时,去除笛卡尔积
#(3)where:从表中筛选的条件
#(4)group by:分组依据
#(5)having:在统计结果中再次筛选
#(6)order by:排序
#(7)limit:分页
  • null 参与运算,运算结果都为null

  • 自定义用到关键字需要家``

  • 执行顺序:

    from... on... where... group by... having... select... distinct... order by... limit...
    
  • sql执行原理:

    1. 先执行from,若存在多表,则:
      1. 求笛卡尔积,相当于得到虚拟表(virtual table) vt1-1
      2. on筛选,在vt1-1基础上筛选,得到vt1-2
      3. 添加外部行(外连接的外部行),在vt1-2的基础上添加外部行,得到vt1-3
      4. 若操作两张以上的表,会重复以上步骤,知道所有表处理完。得到原始数据,最终表vt1
    2. where阶段,vt1筛选过滤,得到vt2
    3. gruop by 和 having ,vt2进行分组和分组过滤 ,分别得到vt3、vt4
    4. select distinct,筛选表中字段,distinct去掉重复行,得到vt5-1 vt5-2
    5. order by ,提取想要的字段后,根据字段排序,得到vt6
    6. limit,在vt6基础上,取出指定行的记录,得到最终结果,vt7

3. 运算符

1. 算术运算符

  • / 或 div
  • %或mod

+只表示数值相加,如果遇到非数值类型,先尝试转成数值,如果转换失败,就按0计算

字符串拼接要使用字符串函数concat()实现

2. 比较运算符

  • =

  • <=> 安全等于运算符,安全地判断两个值,字符串或表达式是否相等可以对null进行判断,都为null返回1,只有一个为null返回0

  • <> 或 !=

  • <

  • <=

  • >

  • >=

  • 非符号型运算符:

    • is null

    • is not null

    • least

    • greatest

    • between and

    • isnull

    • in

    • not in

    • like

    • regexp

    • rlike

3. 逻辑运算符

  • not !
  • and &&
  • or ||
  • xor

4. 位运算符

  • &

  • |

  • ^

  • ~

  • >>

  • <<

5. 运算符的优先级

6. 使用正则表达式查询

正则表达式通常被用来检索或替换那些符合某个模式的文本内容,根据指定的匹配模式匹配文本中符合要求的特殊字符串。例如,从一个文本文件中提取电话号码,查找一篇文章中重复的单词或者替换用户输入的某些敏感词语等,这些地方都可以使用正则表达式。正则表达式强大而灵活,可以应用于非常复杂的查询。

1. 查询以特定字符或字符串开头的记录

select * from fruits where name regexp '^b'

2. 查询以特定字符或字符串结尾的记录

select * from fruits where name regexp 'b$'

3. 用符号“.”来替代字符串中的任意一个字符

select * from fruits where name regexp 'a.g'

4. 使用“*”和“+”来匹配多个字符

# 以b开头且b后面出现a
select * from fruits where name regexp '^ba*';
select * from fruits where name regexp '^ba+';

5. 匹配指定字符串

select * from fruits where name regexp 'on';
select * from fruits where name regexp 'on|ap';

6. 匹配指定字符中的任意一个

select * from fruits where name regexp '[abcd]';
select * from fruits where name regexp '[123456]';

7. 匹配指定字符以外的字符

# 包含字母a~e和数字1~2以外字符
select * from fruits where name regexp '[^a-e1-2]'

8. 使用{n,} 或 {n,m}来指定字符串连续出现的次数

select * from fruits where name regexp 'x{2,}';
select * from fruits where name regexp 'ba{1,8}'

4. 排序与分页

  • 排序规则:

    • desc 降序
    • asc 升序
    • 多列排序:首先排序的第一列必须有相同的列值,才会对第二列进行排序。如果第一列数据中所有值都是唯一的,将不再对第二列进行排序
  • 分页:

    • 分页原理:

      • 所谓分页显示,就是将数据库中的结果集,一段一段显示出来需要的条件
    • 格式:limit [位置偏移量,] 行数

    • 分页显示公式: (当前页数-1) * 每页条数,每页条数

    • 使用limit的好处:

5. 多表查询

  • join on

  • left join on

  • right join on

  • union all

6. 函数

单行函数

1. 数值函数

2. 字符串函数

3. 日期和时间函数

1. 获取日期、时间

2. 日期与时间戳的转换

3. 获取月份、星期、星期数、天数等函数

4. 日期的操作函数

5. 时间和秒钟转换的函数

6. 计算日期和时间的函数

7. 日期的格式化与解析

4. 流程控制函数

5. 加密与解密函数

6. MySQL信息函数

7. 其他函数

聚合函数

  • avg
  • sum
  • min
  • max
  • count

7. 子查询

  • 单行子查询
  • 多行子查询
  • 相关子查询

8. 创建和管理表

  • 创建和管理数据库
    • 创建数据库 create database if not exists 数据库名
    • 使用数据库 use 数据库名
    • 修改数据库 alter database 数据库名 character set 字符集
    • 删除数据库 drop database if exists 数据库名
  • 创建表
    • 方式1
    • 方式2
    • 查看表结构 show create table 表名
  • 修改表
    • 追加一个列 alter table 表名 add 字段名 字段类型
    • 修改一个列 alter table 表名 modify 字段名 字段类型
    • 重命名一个列 alter table 表名 change 旧字段名 新字段名 新数据类型
    • 删除一个列 alter table 表名 drop 字段名
  • 重命名表 rename table 旧表名 to 新表名 或 alter table 表名 rename 新表名
  • 删除表 drop table 表名
  • 清空表 truncate table 表名

9. 数据处理之增删改

  • 插入数据

  • 更新数据

  • 删除数据

10. 数据类型

11. 约束,视图

  • 约束

    • 非空约束
    • 唯一性约束
    • primary key 约束
    • auto_increment
    • foreign key 约束
    • check约束
    • default约束
  • 常见的数据库对象

    • 创建视图

      create view 视图名称
      as 查询语句
      
    • 更新视图:

      • 一般情况:一对一时可以同步更新
      • 不可更新视图: 使用了join 查询不可更新
    • 修改视图

      alter view 视图名称
      as
      查询语句
      
    • 删除视图

      drop view if exists 视图名称
      

12. 存储过程和函数,变量、流程控制和游标,触发器

正常企业开发不会使用这些

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.5