缓存字段

假设一个博客blog包含多个评论comments

如何获取博客的评论数

  • 数一下评论的id
  • select count(id) from comments where blog_id=8
  • 把对应id为8的博客的评论都数一下,返回出来
  • 如果有很多篇博客,很多评论,这样数太慢了

  • 可不可以在blog表上叫一个comment_count字段

每次添加comment则+1,每次删除comment则-1
这样是可以的,可以快速的去获取评论数

这个方法经常用在项目里面,而且我们约定所有这种缓存,都以下划线_count作为结尾

这就涉及到了事务

事务

有些操作必须一次完成

  • 用户评论之后,要做两件事
  • 第一步,在comments表新增记录
  • 第二部,在blogs表将对应的comment_count +1
  • 如果第一步执行了,第二步没有执行,数据就乱了

可以使用事务解决上面的问题

语法:

  1. start transaction;
  2. 语句1; 语句2; 语句3;
  3. commit;

以上 只要一句出错,则全都不生效。

所以我们要把 上面的第一步放在语句1,第二步放在语句2,这样的话,要么都成功,要么都失败

菜鸟教程https://www.runoob.com/mysql/mysql-index.html

MySQL存储引擎

  • 命令 SHOW ENGINES;

image.png

常见的

  • InnoDB - 默认,目前版本是新版的InnoDB
  • MyISAM - 拥有较高的插入、查询速度,但不支持事务
  • Memory - 内存中,快速访问数据 (速度非常快)
  • Archive - 只支持insert和select

每种都有不同的特点和优势,一般最常见的就是InnoDB

InnoDB

  • InnoDB是事务型数据库的首选,支持事务、遵循ACID、支持行锁和外键

索引

语法

  • CREATE UNIQUE INDEX index1 ON users(name(100))

UNIQUE是可以删掉的,如果是唯一性的就加UNIQUE,如果不是就不加
index1 : 索引名称
users:表名
name: 字段名
100 :长度

  • show index in users;

显示users表的所有索引

下次搜索xxx>100的时候就会非常的快

  • where xxx>100 and yyy>200,创建xxx,yyy共同组成的索引