【MySQL】从零开始:掌握MySQL数据库的核心概念(四)

人们之所以不愿改变,是因为害怕未知。但历史唯一不变的事实,就是一切都会改变。

前言

这是我自己学习mysql数据库的第四篇博客总结。后期我会继续把mysql数据库学习笔记开源至博客上。

上一期笔记是关于mysql数据库的表格约束,没看的同学可以过去看看:

【MySQL】从零开始:掌握MySQL数据库的核心概念(三)-CSDN博客https://blog.csdn.net/hsy1603914691/article/details/146385371

表格的增删查改

正常插入

sql 复制代码
//指定列单行插入
insert into tb_name() values();
//全列单行插入
insert into tb_name values();
//指定列多行插入
insert into tb_name() values(),();
//全列多行插入
insert into tb_name values(),();

冲突插入

sql 复制代码
//插入更新
insert into tb_name() values() 
on duplicate key update column_name1=xxx,column_name2=yyy,...;
//替换更新
replace into tb_name() values(); 
  1. 此时无法正常插入 ,已经存在冲突数据主键值重复 或者唯一键值重复

  2. insert into 插入更新时,会存在以下情况:

  • -- 0 row affected: 表中有冲突数据,但冲突数据的值和update的值相等。
  • -- 1 row affected: 表中没有冲突数据,数据被插入。
  • -- 2 row affected: 表中有冲突数据,并且数据已经被更新。
  1. replace into 替换更新时,会存在以下情况:
  • -- 1 row affected: 表中没有冲突数据,数据被插入。
  • -- 2 row affected: 表中有冲突数据,删除后重新插入。

查询插入

sql 复制代码
insert into tb_name select ...;
  1. 除了向表格中插入具体的数据 ,还可以向表格中插入查询出来的数据

delete子句-turncate子句

sql 复制代码
//删除表格的数据
delete from tb_name ...;
//重置表格
turncate table tb_name;

1.turncate 只能对整个表格 进行操作,不能像delete 一样针对部分数据 操作。

2.turncate 会重置auto_increment 项。

  1. 实际上turncate不对数据操作,所以比delete更快,但是turncate在删除数据的时候,并不经过真正的事物,所以无法回滚。

整体查询

sql 复制代码
//全列查询
select * from tb_name;
//指定列查询
select column_name1 column_name2 from tb_name;
//表达式运算查询
select column_name1 as new_name1 column_name2+column_name3+num as new_name2 from tb_name;
//去重查询
select distinct column_name1 from tb_name;
  1. 通常情况下不建议使用全列查询
  • 查询的列越多,意味着需要传输的数据量越大。
  • 可能会影响到索引的使用。

条件查询

运算符

|-----------------|---------------------------------------------------|
| >,>=,<,<= | 大于,大于等于,小于,小于等于 |
| = | 等于, null 不安全 |
| != | 不等于 |
| between a and b | 范围匹配, [a,b] ,如果 a<=value<=b ,返回 true(1) |
| in(option,...) | 如果是 option中的任意一个,返回true(1) |
| is null | 是null |
| is not null | 不是null |
| like | 模糊匹配。其中 % 表示任意多个(包括 0 个)任意字符; _ 表示任意一个字符。 |
[算术运算符]

|-----|---------------------------------|
| and | 与运算,多个条件必须都为true(1),结果才是true(1) |
| or | 并运算,任意一个条件为true(1),结果为true(1) |
| not | 非运算,条件为true(1),结果为false(0) |
[逻辑运算符]

where子句
sql 复制代码
select ... from ... where ...
  1. 语法上,先执行from... ,再执行where... ,最后执行select... 。所以在where子句 中,不能使用select... 中定义的别名。

  2. where子句 中可以使用圆括号() 来限制先后逻辑。

修改数据

sql 复制代码
update tb_name set column_name_change ...;
  1. column_name_change 大部分以重新赋值 的形式呈现。

查询排序

sql 复制代码
//升序
asc
//降序
desc
//
select ... from ... where ... order by column_name1 sort_order;
  1. order by 子句中,默认升序排序

  2. NULL 值也参与排序,但是视为比任何值都小

  3. 语法上,先执行from... ,再执行where... ,然后执行select... ,最后执行order by... 。所以在where子句 中,不能使用select... 中定义的别名,但是在order by子句 中,可以使用select... 中定义的别名。

分页筛选

sql 复制代码
//从下标为0的数据开始,往后筛选n条数据
select ... from ... where ... limit n;
//从下标为s的数据开始,往后筛选n条数据
select ... from ... where ... limit n offset s;
  1. 未知表 进行查询时,最好加上:limit 1 。避免因为表中数据过大 ,查询全表数据导致数据库卡死。

聚合函数

|---------|-----------------------|
| count() | 返回查询到的数据的数量 |
| sum() | 返回查询到的数据的总和,不是数字没有意义 |
| avg() | 返回查询到的数据的平均值,不是数字没有意义 |
| max() | 返回查询到的数据的最大值,不是数字没有意义 |
| min() | 返回查询到的数据的最小值,不是数字没有意义 |

sql 复制代码
select func(column_name) from tb_name;
  1. 聚合函数视为一个整体,相当于一个新的变量

分组查询

sql 复制代码
select func(column_name1) from tb_name group by column_name2 having ...;
  1. 分组的目的是为了更好的进行分组聚合统计

  2. 分组的依据一般是指定的列名 ,根据该列的不同数据 来进行分组。

  3. where 主要是对具体的某一列 进行条件筛选,having 主要是对分组后的结果 进行条件筛选。

  4. wherehaving 的条件筛选的阶段 是不同的。

致谢

感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!

相关推荐
三氧化真2 小时前
使用FastExcel时的单个和批量插入的问题
java·数据库·mybatis
lllsure3 小时前
SpringMVC 拦截器(Interceptor)
java·开发语言·mysql
程序猿阿伟3 小时前
《探秘SQL的BETWEEN:解锁数据范围查询的深度奥秘》
大数据·数据库·sql
ManageEngine卓豪3 小时前
什么是SQL作业
数据库·数据库性能·sql作业
THE MATRIX-HZB3 小时前
DQL语句-distinct去重
数据库·mysql·github
患得患失9493 小时前
【后端】【Django DRF】从零实现RBAC 权限管理系统
数据库·django·sqlite
__淡墨青衫__3 小时前
Django之旅:第五节--Mysql数据库操作(一)
数据库·mysql·django
橙序研工坊5 小时前
MySQL的基础语法1(增删改查、DDL、DML、DQL和DCL)
数据库·sql·mysql·database
晴天Y285 小时前
redis部署架构
数据库·redis·架构
gjc5926 小时前
MySQL源码学习系列(二)--面试高频问题:general log、slowlog记录顺序
数据库·学习·mysql·面试·职场和发展