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之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

MySql死锁怎么排查的方法实现

《MySql死锁怎么排查的方法实现》本文主要介绍了MySql死锁怎么排查的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录前言一、死锁排查方法1. 查看死锁日志方法 1:启用死锁日志输出方法 2:检查 mysql 错误

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

MySQL修改密码的四种实现方式

《MySQL修改密码的四种实现方式》文章主要介绍了如何使用命令行工具修改MySQL密码,包括使用`setpassword`命令和`mysqladmin`命令,此外,还详细描述了忘记密码时的处理方法,包... 目录mysql修改密码四种方式一、set password命令二、使用mysqladmin三、修改u

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

SpringBoot中的404错误:原因、影响及解决策略

《SpringBoot中的404错误:原因、影响及解决策略》本文详细介绍了SpringBoot中404错误的出现原因、影响以及处理策略,404错误常见于URL路径错误、控制器配置问题、静态资源配置错误... 目录Spring Boot中的404错误:原因、影响及处理策略404错误的出现原因1. URL路径错

SQL Server数据库迁移到MySQL的完整指南

《SQLServer数据库迁移到MySQL的完整指南》在企业应用开发中,数据库迁移是一个常见的需求,随着业务的发展,企业可能会从SQLServer转向MySQL,原因可能是成本、性能、跨平台兼容性等... 目录一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据二、迁移工具的选择2.1

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查