Mysql之前没学过不会的笔记以及Mysql 5.5 和8.0 区别,安装时候错误的记录

本文主要是介绍Mysql之前没学过不会的笔记以及Mysql 5.5 和8.0 区别,安装时候错误的记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MYISAM 和 INNODB 的区别

在这里插入图片描述
一些常规的操作
MYISAM 节约空间,速度较快
INNODB 安全性高,事务的处理,多表多用户操作
delete 和Truncate 区别
相同点:都能删除数据,都不会删除表结构
不同:
Truncate 重新设置,自增列,计数器会归零
Truncate 不会影响事务
当我们DELETE 删除的问题,重启数据库,现象
如果引擎是InnoDB 自增列会从1 开始(因为是存在内存当中的)
如果引擎是MyISAM 继续从上一个自增量开始(存在文件中的,不会丢掉)
去除重复的关键字

select distinct '字段名' from 表名 

Mysql 中常用的函数

-- 常用的函数
-- 数学的
SELECT ABS(8)  --绝对值
SELECT CEILING(0.1) --向上取整
SELECT FLOOR(8.1)--向下取整
SELECT RAND() --返回一个0~1 之间的随机数
SELECT SIGN(10) --判断一个数的符号 0就是0 负数时-1  正数是 1
-- 字符串函数
SELECT CHAR_LENGTH('我爱憨憨')  --字符串的长度
SELECT CONCAT('我','爱','憨憨')  --拼接字符串
SELECT INSERT('I am  meinv',1,2'very')  --查询加替代
SELECT LOWER('ssssssss')  --小写字母
SELECT UPPER('SSSSSSSSSSSS'--大写字母)
SELECT INSTR('fjj','f') --返回第一次出现的字符串的索引
SELECT REPLACE('我爱憨憨','我','爱','憨憨')  -替换
SELECT SUBSTR(''','','憨憨'',4,6) --返回指定的字符串
SELECT REVERSE('我','爱','憨憨') --反转
--查询某个字段后替换
select replace(字段,'替换前的值','替换后的值') from 表名 where 字段 like '字段%'
-- 时间和日期函数
SELECT CURRENT_DATE --获取当前日期
SELECT CURDATE()--获取当前日期
SELECT NOW() --获取当前的时间
SELECT LOCALTIME() --本地时间
SELECT SYSDATE() --系统时间

聚合函数

count(字段)  --求总和的
count(*),count(1) --之间的区别?
--如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。 
--因为count(*),自动会优化指定到那一个字段。所以没必要去count(1),用count(*),sql会帮你完成优化的 因此:count(1)和count(*)基本没有差别! 
--count(1) and count(字段)
--两者的主要区别是
--(1) count(1) 会统计表中的所有的记录数,包含字段为null 的记录。
--(2) count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。
--执行效果上:  
--count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL  
--count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL  
--count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,
--统计。
--执行效率上:  
--列名为主键,count(列名)会比count(1)快  
--列名不为主键,count(1)会比count(列名)快  
--如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)  
--如果有主键,则 select count(主键)的执行效率是最优的  
--如果表只有一个字段,则 select count(*)最优。
avg() --平均值
sum() --求总和
max() --最大值
min() --最小值
order by  排序 配合having 使用

MD 5 加密
什么是MD5?
主要增强算法复杂度和不可逆性
MD5 不可逆,具体的值的MD5 是一样的
数据库的特性
原子性:要么都成功,要么都失败
一致性: 事务前后的数据完整性要保持一致
持久性:事务提交,事务一但提交测不可逆,被持久化到数据库中
隔离性:事务隔离级别是多个用户并发访问数据库时,数据库为每个用户开启的事务,不能其他的事务的操作数据所干扰事务之间相互隔离
隔离的级别
未提交读:脏读现象,事务A读取到事务B未提交的数据;

已提交读:不可重复读现象,解决了脏读现象,在同一个事务里面进行两次Select操作,先读取一遍,然后另外一个事务对你读取的数据进行update操作,所以前后两次读取的是两个不同的数据;

可重复读:解决不可重复度现象,幻读现象,事务Aupdate数据库之后得到的数据,事务BInsert了数据库,增加了许多符合事务A查询条件的数据,事务A再次进行读取的时候能读取到符合自己update条件却位update的数据;

串行化:解决所有问题,进行数据操作是不允许其他事务进行对这个数据的任何操作,sync锁;
索引
索引时帮助Mysql 高效获取数据的数据结构
索引就是数据结构
索引的分类
在一个表中主键索引只能有一个,唯一索引可以有多个
主键索引
唯一的标识,主键不可重复,只能有一个列作为主键
唯一索引
避免重复的列出现,唯一索引可以重复,多个列都可以标识,唯一索引
常规索引
默认的,index ,key 关键字来设置的
全文索引
在特定的数据库引擎下才有,MyISAm
快速定位数据

--索引的使用
--1,在创建表的时候给字段增加索引
--2,创建完毕后,增加索引
--显示所有的所有信息
show index from 表名
--增加一个全文索引
alter table 表名  add fulltext index '字段名'(‘索引名’)
explain select * from 表名 --分析sql 执行的状况 

索引的作用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

加上索引后查询的速度快了很多。
我的表结构

CREATE TABLE `test`.`Untitled`  (`id` bigint(0) UNSIGNED NOT NULL AUTO_INCREMENT,`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '用户昵称',`email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户邮箱',`phone` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '手机号',`gender` tinyint(0) UNSIGNED NULL DEFAULT 0 COMMENT '性别(0:男;1:女)',`password` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码',`age` tinyint(0) NULL DEFAULT 0 COMMENT '年龄',`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP,`update_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0),PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'app用户表' ROW_FORMAT = Dynamic;
-- --查看数据库有多少数据
select count(1) from app_user
-- 当我们查询一个手机号的时候
SELECT * FROM app_user WHERE phone  ='13817917100';
-- --查看
EXPLAIN select * from app_user WHERE phone ='13817917100'
-- 给phone 字段添加一行索引
CREATE INDEX id_app_user_phone ON app_user(phone)
-- --查看
EXPLAIN select * from app_user WHERE phone ='13817917100'

Mysql 5.5 和Mysql 8.0 区别
这个是我今天下午发现的,原来我一直用的5.5 ,在写关于时间戳的问题的时候我发现5.5 不可以这样写,在这里插入图片描述
我就没事百度了一下区别。顺便安装了一下mysql 最新的版本/
安装时候遇到的错误吧
在这里插入图片描述
修改my.ini
在这里插入图片描述
第二个错误是因为没有用管理员的身份打开cmd 导致下载的mysql 的时候一直报错
最后一定要记住他默认生成的密码,用可视化工具打开会提示你换新的密码
安装完后先是在建表的时候看到了这个
在这里插入图片描述
了解了才知道原来他是直接从5.7 直接就跳到了8.0 . 据说性能提升了很多具体我也不知道。只总结了下面的这点
在这里插入图片描述

账户安全
老版本的命令

grant all privileges on *.* to '用户名'@'主机' identified by '密码'

新版本就需要分开执行

create user '用户名'@'主机' identified by '密码';
grant all privileges on *.* to '用户名'@'主机';

用之前的会报错
优化器索引
1,就是看到的那个隐藏的索引(invisible index)
隐藏索引不会被优化器使用

应用场景
软删除
删除索引,如果删除错了索引,只能通过索引的方式将其添加回来,对于一些大的数据库而言,是比较耗性能的;为了避免删错,可以先将其设置为不可见,优化器这时候就不会使用它,但是后台仍然在维护,确定后,再删除。
灰度发布
与软删除差不多,如果想测试一些索引的功能或者随后可能会使用到这个索引,可以先设置为隐藏索引,对于现有的查询不会有影响,测试后确定需要该索引,可以将其设置成可见索引。
命令

--如果是不隐藏,则不需要后面的invisible关键字
create index 索引名称 on 表名(字段名) invisible;
--查询某一张表的索引,执行如下命令:
show index from 表名
--使用explain语句查看查询优化器对索引的使用情况
explain select * from 表名 where 条件;
--设置已经存在的索引为可见或者隐藏 
alter table 表名 alter index 索引名 visible;
alter table 表名 alter index 索引名 invisible;

主键不可以设置为隐藏
2.降序索引
Mysql 8.0 开始真正支持降序索引,只有InnoDB 引擎支持降序所以又必须是BTREE 降序索引,Mysql 8.0 不在对group by 操作进行隐式排序
3,函数索引
索引中使用函数表达式
支持json 数据节点的索引是基于 虚拟列的功能实现的
窗口函数
1原子ddl 操作
MySQL5.7执行drop命令 drop table t1,t2; 如果t1存在,t2不存在,会提示t2表不存在,但是t1表仍然会被删除。
MySQL8.0执行同样的drop命令,会提示t2表不存在,而且t1表不会被删除,保证了原子性。
2,自增列持久化
  MySQL5.7及其以前的版本,MySQL服务器重启,会重新扫描表的主键最大值,如果之前已经删除过id=100的数据,但是表中当前记录的最大值如果是99,那么经过扫描,下一条记录的id是100,而不是101。
  
  MySQL8.0则是每次在变化的时候,都会将自增计数器的最大值写入redo log,同时在每次检查点将其写入引擎私有的系统表。则不会出现自增主键重复的问题。
  索引的原则
  索引不是越多越好
  不要对进程变动数据加索引
  小数据量的表不需要加索引
  索引一般加在常用来查询的字段上

这篇关于Mysql之前没学过不会的笔记以及Mysql 5.5 和8.0 区别,安装时候错误的记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/210301

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

MySQL中VARCHAR和TEXT的区别小结

《MySQL中VARCHAR和TEXT的区别小结》MySQL中VARCHAR和TEXT用于存储字符串,VARCHAR可变长度存储在行内,适合短文本;TEXT存储在溢出页,适合大文本,下面就来具体的了解... 目录一、VARCHAR 和 TEXT 基本介绍1. VARCHAR2. TEXT二、VARCHAR

MySQL中C接口的实现

《MySQL中C接口的实现》本节内容介绍使用C/C++访问数据库,包括对数据库的增删查改操作,主要是学习一些接口的调用,具有一定的参考价值,感兴趣的可以了解一下... 目录准备mysql库使用mysql库编译文件官方API文档对象的创建和关闭链接数据库下达sql指令select语句前言:本节内容介绍使用C/

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

MySQL之搜索引擎使用解读

《MySQL之搜索引擎使用解读》MySQL存储引擎是数据存储和管理的核心组件,不同引擎(如InnoDB、MyISAM)采用不同机制,InnoDB支持事务与行锁,适合高并发场景;MyISAM不支持事务,... 目录mysql的存储引擎是什么MySQL存储引擎的功能MySQL的存储引擎的分类查看存储引擎1.命令

python依赖管理工具UV的安装和使用教程

《python依赖管理工具UV的安装和使用教程》UV是一个用Rust编写的Python包安装和依赖管理工具,比传统工具(如pip)有着更快、更高效的体验,:本文主要介绍python依赖管理工具UV... 目录前言一、命令安装uv二、手动编译安装2.1在archlinux安装uv的依赖工具2.2从github

JDK8(Java Development kit)的安装与配置全过程

《JDK8(JavaDevelopmentkit)的安装与配置全过程》文章简要介绍了Java的核心特点(如跨平台、JVM机制)及JDK/JRE的区别,重点讲解了如何通过配置环境变量(PATH和JA... 目录Java特点JDKJREJDK的下载,安装配置环境变量总结Java特点说起 Java,大家肯定都