【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 的条件筛选的阶段 是不同的。

致谢

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

相关推荐
ONETHING_CLOUD_227 分钟前
设备存储空间不足怎么办?
数据库·电脑·备份·数据存储·网盘·存储空间·数码知识
王者鳜錸33 分钟前
2024从Maven-MySQL-Nginx部署
mysql·nginx·maven
用户62799471826236 分钟前
南大通用GBase 8a gn层物理存储结构介绍
数据库
用户6279947182621 小时前
关于南大通用GBase 8s的DML触发器的讨论
数据库
落霞的思绪1 小时前
NoSql文档型数据库——Mongodb
数据库·mongodb·nosql
写bug写bug1 小时前
为什么 LIMIT 0, 10 快,而 LIMIT 1000000, 10 慢?
数据库·后端·mysql
用户6279947182621 小时前
1小时掌握南大通用GBase 8c Hint核心技巧!让SQL从10秒到1秒
数据库
再路上12162 小时前
direct_visual_lidar_calibration iridescence库问题
java·服务器·数据库
卡皮巴拉爱吃小蛋糕3 小时前
MySQL的事务(Transaction)【学习笔记】
数据库·笔记·学习·mysql