《深入浅出MySQL》笔记

《深入浅出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(全文索引)

存储过程

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

发布了47 篇原创文章 · 获赞 11 · 访问量 9万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章