《深入浅出MySQL》笔记

本文深入解析MySQL的MyISAM与InnoDB存储引擎特性,对比不同数据类型的适用场景,探讨索引的原理与分类,包括B-Tree、HASH和全文索引,以及存储过程与函数的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《深入浅出MySQL》

存储引擎的选择

MyISAM
  1. 特性:
  • 不支持事务
  • 不支持外键
  1. 优点:
  • 访问速度快,对事物完整性没有要求或者以SELECT、INSERT为主的可以使用

InnoDB
  1. 自动增长列
  2. 外键约束
  • RESTRICT:字表存在记录,限制父表更新
  • NO ACTION:同上
  • CASCADE:父表执行更新或者删除操作时,字表执行同样动作
  • SET NULL:父表执行更新或者删除操作时,字表把对应字段设为null
  1. 存储方式
  • 使用共享空间存储
  • 使用多表空间存储

MEMORY
  1. 数据存储在内存中
  2. 访问速度快默认使用HASH索引
  3. 服务关闭,数据就会丢失

选择合适的数据类型

char与varchar
  1. char:固定长度字符类型
  2. varchar:可变长度字符类型
  3. 对于即将存储的数据尾部存在空格的,char将删除尾部空格,varchar将保留空格

浮点数与定点数
  1. 在数据库存储浮点数时存在精度损失,会四舍五入
  2. 定点数存储准确,用于货币存储

tinyInt(1)、smallint(2)等,代表什么意思?

在这里插入图片描述

Storage (Bytes)表示所占的字节数,1字节=8位;
tinyInt允许存储的最大的有符号数字是:2=256;无符号为256/2 = 128;其他类型以此类推

日期类型选择
  1. 对于datetimetimestemp,优先使用datetimetimestemp到2038年就不可以用了
  2. 若应用存在多时区,使用timestemp

MySQL字符集设置

  1. MySQL的字符集和校对规则有4个级别的默认设置:
  2. 服务器级
  3. 数据库级
  4. 表级
  5. 字段级

索引

索引(Index)是帮助MySQL高效获取数据的数据结构

目的
  1. 目的在于提高查询效率,类比于字典

功能
  1. 查找
  2. 排序

优势与劣势

优:

  1. 提高数据检索的效率,降低数据库的IO成本
  2. 降低数据排序的成本,降低了CPU的消耗

劣:

  1. 索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以所以也需要占用空间
  2. 在做数据修改时,不仅要保存数据,还要修改索引信息

索引的分类

  • 单值索引:一个索引只包含单个列,一个表可以有多个单列索引
  • 唯一索引:索引列的值是唯一的,但允许有空值
  • 复合索引:一个索引包含多个列

索引的创建,查看和删除
CREATE TABLE `example` (
  `id` varchar(40) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `city` varchar(40) DEFAULT NULL,
  `country` varchar(40) DEFAULT NULL,
  `email` varchar(40) DEFAULT NULL,
  `url` varchar(255) DEFAULT NULL,
  `country_code` varchar(5) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `exampleName` (`name`(10))
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  1. 创建

为example表中的name字段创建10字节的前缀索引

CREATE INDEX exampleName ON example(name(10));
  1. 查看
SHOW INDEX FROM example;
  1. 删除
DROP INDEX exampleName ON example;

索引的存储分类
  1. B-Tree索引:最常见的索引类型,大部分引擎都支持
  • B-Tree索引中的B不代表二叉树,代表平衡树
  1. HASH索引:只有Memory索引支‘’
  2. R-Tree
  3. Full-Text(全文索引)

存储过程

存储过程和函数的区别:函数必须有返回值,而存储过程没有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值