• 数据库存储引擎查看

      • Support字段说明

        • default的为默认引擎

        • YES表示可以使用

        • NO表示不能使用

      • 命令

        • SHOW ENGINES

    • 四大引擎

      • MEMORY

        • 使用场景:由于易失性,可以用于存储在分析中产生的中间表

        • 特点

          • 所有的数据都保存在内存中,一旦服务器重启,所有memory存储引擎的表数据会消失,但表结构会保留

          • 存储限制:取决RAM(随机存储器)

          • 事务支持:不支持事务

      • MylSAM

        • 特点

          • 强调快熟读取操作

            • 表锁

          • 存储限制:256TG

          • 事务支持:不支持事务

        • 使用场景:大量查询,很少修改的场景

      • InnoDB

        • 使用场景:一般事务性,均使用该引擎,用途最广,如果把我不准使用何种引擎,就使用该引擎

        • 特点

          • 修改快,支持事务

            • 行锁

          • 存储限制:64TG

          • 事务支持:支持事务

      • ARCHIVE

        • 使用场景:在日志和数据采集的时候可以使用

        • 特点

          • 只允许插入和查询,不允许修改和删除,压缩存储,节约空间,可以实现高效率的查询

          • archive表必My了SAM表要小75%,比支持事务处理的innoDB表小大约80%

          • 不支持索引(自增ID列除外)

    • 数据库管理

      • 元数据库简介

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

      • 元数据库的分类

        • information_schema

          • 信息数据库,保存mysql所维护的其他数据库信息。列如:数据库名,数据库的表,表栏的数据类型和访问权限等

        • mysql

          • 核心数据库,主要负责存储数据库的用户,权限设置,关键字等。mysql自己需要使用的控制和管理信息。

        • performance_schema

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

      • 相关操作

        • 数据库的增删改查及作用

          • use数据库名

          • create database if not exisfs 数据库名 default charse utf8 collate utf8_feneral_ci

            • 设置了字符集编码以及不区分大小写

          • show database;

          • deop database 数据库名;

      • MySQL库

        • 权限相关

          • 1.user表(用户层权限)

          • 2.db表(数据库层权限)

          • 3.tables_priv(表层权限)

          • 4.columns_priv(字段层权限)

    • 数据表管理

      • 三大范式

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

          • 列如:湖南省长沙市岳麓区浪琴湾清水21栋

        • 第二范式:主键约束

          • 列如:订单项表设计:id,单价,数量,小计

        • 第三范式:外键约束

          • 列如:患者id,患者姓名同时存在于一张关联表中

      • 优化原则

        • 更小通常更好

          • 更小的磁盘空间,内存,cpu换成

          • 更少的cpu周期

          • 更小通常更好

        • 简单就好

          • 整型比字符串操作代价更小

          • 用时间类型表示日期(date,datetime等)而不用字符串

        • 尽量避免null

          • null为列的默认值,但除非确实需要,尽量避免使用null

          • 尽量指定列为NOT NULL,特别是需要建索引的列

          • 查询中包括有null的类,MySQL更难优化

            • 不利于使用索引

            • 索引统计更复杂

            • 值比较更复杂

          • 用整型值而不是字符串表示IP地址

            • INET_ATON()

            • INET_NTOA()

      • 分类

        • 整数

          • tinyint 8位 (-128~127)

          • smallint 16位 (-32768~32767)

          • mediumint 24位 (~8388608~8388607)

          • int 32位 大约正负212亿

          • bigint 64 位

        • 实数(带有小数点)

          • float 4个字节

          • double 8个字节

          • decimal 最多允许65个数字

        • 字符串

          • char

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

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

          • varchar

            • 比定长类型节约空间

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

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

        • text&bolb

          • text存储字符数据

            • tinytext

            • smalltext

            • mediumtext

            • text

            • longtext

          • blob存储二进制数据

            • tinybolb

            • smallbolb

            • mediumbolb

            • longbolb

        • 日期时间

          • datetime

            • 精度:秒

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

            • 范围:1001——99999年

          • timestamp

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

            • 占用4个字节存储空间

            • 范围:1970年-2038年

            • 与时区有关

            • 默认为not null

            • 通常尽量适用timestamp

            • 精度:秒

          • date

            • yyyy-MM-dd

            • HH:mm:ss

          • 选择标识符

            • 用来进行关联操作

            • 在其他表中周围外键

            • 整型通常是标识列的最好选择

            • 相关的表中使用相同的数据类型

            • 尽量避免字符串作为标识列,尤其是随生成的字符串,(如:UUID)导致insert与select都很慢

              • 插入值被随机写到索引的不同位置,insert很慢,导致容易也分裂,磁盘随机读取

              • 逻辑上相邻得到行被分布在磁盘和内纯的不同地方,select慢

              • 是MySQL查询缓存失效

              • 如果需要存储UUID,则应将“-”去除

    • 数据库账号管理

      • 相同

        • 查询用户

          • SELECT * from User

        • 查看用户常用信息

          • select host,user from User,

        • 删除用户

          • dropr user is

      • 权限操作(Grant)

        • grant SELECT on db_xiaoli.t_p1_user to zs@’% grant UPDATE on db_xiaoli.t_p1_user to zs@’% grant SELECT on db_xiaoli.* to zs@’% grant ALL on db_xiaoli.t_p1_user to zs@’%’ revoke all on db_xiaoli.t_p1_user from zs@’%’ revoke SELECT,UPDATE ON ‘db_xiaoli’,’t_p1)user’ TO ‘zs’@’%’

        • show grants for ‘zs’@’%’ 查看用户权限

      • 不同

        • 5.7

          • 创建用户并设置登录密码

            • crate user Is identified by ‘123456’;

          • 修改用户密码

            • 命令:set password for 用户名=password(“新密码”); set password for zs=password(‘123456’);

        • 8.0

          • 创建用户并设置登录密码

            • crate user 用户名; create User ls;

          • 修改用户密码

            • ALTER USER 用户 IDENTIFIED BY ‘新密码’ ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘new_password’;