MySQL四大引擎&建库建表&账号管理

目录

[一. 数据库四大引擎](#一. 数据库四大引擎)

[1.1 引擎查看](#1.1 引擎查看)

[1.2 InnoDB引擎](#1.2 InnoDB引擎)

[1.3 MyISAM引擎](#1.3 MyISAM引擎)

[1.4 MEMORY引擎](#1.4 MEMORY引擎)

[1.5 Archive引擎](#1.5 Archive引擎)

[二. 数据库管理](#二. 数据库管理)

[2.1 元数据库](#2.1 元数据库)

[2.2 数据库的增删改查及使用](#2.2 数据库的增删改查及使用)

[2.3 权限相关表](#2.3 权限相关表)

[三. 数据表管理](#三. 数据表管理)

[3.1 三大范式](#3.1 三大范式)

[3.2 基本数据类型](#3.2 基本数据类型)

优化原则

分类

[四. 数据库账号管理](#四. 数据库账号管理)

[4.1 通用](#4.1 通用)

[4.2 不同](#4.2 不同)

[4.2.1 MySQL5.7版本](#4.2.1 MySQL5.7版本)

[4.2.2 MySQL8.0版本](#4.2.2 MySQL8.0版本)

思维导图


一. 数据库四大引擎

1.1 引擎查看

查看命令

  • SHOW ENGINES

Support字段说明

  • default为默认引擎
  • YES表示可以使用
  • NO表示不能使用

1.2 InnoDB引擎

使用场景

  • 事务性的一般使用该引擎,用途最广,如果不知道使用哪种引擎,就使用该引擎

特点

  • 修改快,支持事务(只有它支持事务)------行锁
  • 存储限制:64TG

1.3 MyISAM引擎

使用场景

  • 在开发中,数据字典、系统参数表会用到。
  • 大量查询,很少修改的时候

特点

  • 强调了快速读取操作------表锁
  • 存储限制:256TG
  • 不支持事务

1.4 MEMORY引擎

使用场景

  • 由于易失性,用于存储在分析中产生的中间表

特点

  • 所有的数据都存储在内存中,一旦服务器重启,所有的表数据都会丢失但表结构会保存
  • 存储限制:取决于RAM(随机存储器)
  • 不支持事务

1.5 Archive引擎

使用场景

  • 在日志和数据采集时使用

特点

  • 只允许插入和查询,不允许修改和删除,压缩存储,节约空间,可以实现高并发的插入,支持在自增ID上建立索引

二. 数据库管理

2.1 元数据库

简介

  • 记录MySQL自身数据的数据库

元数据库分类

1、information_schema

信息数据库,保存MySQL所维护的其他数据库信息。

例如:数据库名、数据库表、表栏的数据类型与访问权限等。

2、mysql

核心数据库,主要负责存储数据库的用户,权限设置,关键字等。

mysql自己需要使用的控制和管理信息。

3、performance_schema

用于mysql的监控数据的存放。

2.2 数据库的增删改查及使用

  1. 使用:use 数据库名
  2. 增加:create database if not exists 数据库名 default charset utf8 collate utf8_general_ci;(设置字符集编码以及不区分大小写)
  3. 查询所有数据库:show database
  4. 删除:drop database 数据库名;

2.3 权限相关表

1、user表(用户层权限)

决定用户拥有哪些数据库的权限

2、db表(数据库层权限)

决定用户对于该数据库哪些表具有操作权限

3、tables_priv表(表层权限)

决定了用户对于具体某张表具有增删改查的权限

4、columns_priv表(字段层权限)

决定了用户对于某张表的哪些字段具有操作权限

三. 数据表管理

3.1 三大范式

  • 第一范式:列不可再分(原子性)

假如说,将一个地址湖南省长沙市岳麓区浪琴湾15栋。这个时候需要用四个字段来保存这个地址:province保存省份、city保存市、area保存区域、address保存详细地址。这样就符合了第一范式。

  • 第二范式:主键约束

也就是说一张表的每一个字段它都要依托于主键存在。例如:订单项表里有编号、单价、数量、小计。这里的小计是依托于单价和数量存在,这就违背了第二范式。

  • 第三范式:外键约束

假如说在医疗系统中,需要拿到一个患者的档案信息,那么就需要用到两张表,患者信息表和医生信息表。要在患者信息表中保存医生id,而不能直接在患者表中拿到医生姓名。

3.2 基本数据类型

优化原则

1、越小越好

  • 越小越快;
  • 拥有更小的磁盘空间、内存、CPU缓存;
  • 更少的CPU周期。

2、简单就好

  • 整型比字符串操作代价更小;
  • 用时间类型表示日期,而不是字符串。

3、尽量避免使用NULL

  • 尽量指定列为NOT NULL,特别是需要建索引的列;
  • 查询含有NULL的类,MySQL更难优化(不利于使用索引、索引统计更复杂、值比较 更复杂);
  • 用整型值而非字符串表示IP地址。

分类

1、整数

  • tinyint 8位(-128~127)
  • smallint 16位(-32768~32767)
  • mediumint 24位(-8388608~8388607)
  • int 32位 (大约正负21亿)
  • bigint 64位

2、实数(带有小数点)

  • float 4个字节
  • double 8个字节
  • decimal 最多允许65个数字(涉及到数字的运算最好使用decimal)

3、字符串

  • char:定长,MySQL根据定义字符串的长度一次分配足够的空间;

适用场景:较短的字符串,且所有值接近同一长度。

  • varchar:比定长类型节约空间;

适用场景:字符串的最长长度比评估长度大很多,列的更新较少;

缺点:频繁修改,且字符串的长度变化大时,可能出现页分裂。

4、text存储字符数据 & blob存储二进制数据

  • tinytext tinyblob
  • smalltext smallblob
  • mediumtext mediumblob
  • text blob
  • longtext longblob

都为存放很大的数据而设计;

与其他数据不同,都作为独立的对象存储;

当值太大时,使用外部存储区存储。

5、日期时间

  • datetime

精度:秒;

与时区无关,8个字节存储空间;

范围:1001至9999年。

  • timestamp

保存1970年1月1日午夜以来的秒数;

占用4个字节存储空间;

范围:1970年至2038年;

与时区有关;

默认为NOT NULL;

通常尽量使用timestamp。

  • date:yyyy-MM-dd
  • time:HH:mm:ss

6、选择标识符

  • 用来进行关联操作;
  • 在其他表中作为外键;
  • 整型通常是标识符的最好选择;
  • 相关的表中使用相同的数据类型;
  • 尽量避免字符串作为标识列,尤其是随机生成的字符串(如uuid)

原因:①插入值被随机写到索引的不同位置,insert慢,容易导致页分裂,磁盘随机读取;

②逻辑上相邻的行被分布在磁盘和内存的不同地方,select慢;

③使MySQL查询缓存失效;

④如果需要存储uuid,则应将"-"去除

四. 数据库账号管理

4.1 通用

1、查询用户

select *from user;

2、查看用户常用信息

select host,user from user;

user表中host列的值的意义:

  • % 匹配所有主机
  • localhost localhost不会被解析成IP地址,直接通过UNIXsocket连接
  • 127.0.0.1 会通过TCP/IP协议连接,并且只能在本机访问

3、删除用户

drop user 用户名;

4、权限操作

  1. 设置权限(grant):grant privileges on databasename.tablename to username@'host';
  2. 撤销权限(revoke):revoke privileges on databasename.tablename from username@'host'; revoke只能回收grants列表中更小的权限;
  3. 查看用户权限:show grants for 用户名;

4.2 不同

4.2.1 MySQL5.7版本

1、创建用户并设置登录密码

create user 用户名 identified by '密码';

(identified by 会将纯文本密码加密作为散列值存储)

2、修改用户密码

set password for 用户名 = password('新密码');

flush privileges;

4.2.2 MySQL8.0版本

1、创建用户并设置登录密码

用户名密码创建需要分开;

create user 用户名;

2、修改用户密码

alert user 用户 identified with mysql_native_password by'123456';

思维导图

相关推荐
不太可爱的叶某人34 分钟前
【学习笔记】MySQL技术内幕InnoDB存储引擎——第5章 索引与算法
笔记·学习·mysql
岁岁岁平安36 分钟前
Redis基础学习(五大值数据类型的常用操作命令)
数据库·redis·学习·redis list·redis hash·redis set·redis string
量子联盟2 小时前
原创-基于 PHP 和 MySQL 的证书管理系统,免费开源
开发语言·mysql·php
小光学长2 小时前
基于vue框架的防疫科普网站0838x(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
极限实验室3 小时前
使用 Docker Compose 简化 INFINI Console 与 Easysearch 环境搭建
数据库·docker·devops
飞翔的佩奇3 小时前
Java项目:基于SSM框架实现的旅游协会管理系统【ssm+B/S架构+源码+数据库+毕业论文】
java·数据库·mysql·毕业设计·ssm·旅游·jsp
鬼才血脉4 小时前
Linux(centos)安装 MySQL 8
linux·mysql·centos
float_六七5 小时前
SQL六大核心类别全解析
数据库·sql·oracle
Code季风7 小时前
将 gRPC 服务注册到 Consul:从配置到服务发现的完整实践(上)
数据库·微服务·go·json·服务发现·consul
Boilermaker19927 小时前
【Java EE】SpringIoC
前端·数据库·spring