就是建立在关系模型的基础上的数据库,关系模型表名了数据库中数据之间的练习【一对一、一对多、多对多】(MySQL、Oracle、SQL Server】
SQL 是一种结构化查询语言,目的是从数据库中读写数据。几乎所有主流的数据库都支持 SQL,适应性非常强。可以新建数据、表,进行增删改查的操作
decimal 是定点数,float/double 是浮点数。decimal 可以存储精确的小数值,float/double 只能存储近似的小数值。decimal 可以避免浮点数带来的精度失真问题【decimal 类型对应的就是 Java 中的 BigDecimal 类】
text 类型常用于存储长文本数据,比如博客的内容。blob 类型主要用于存储二进制大对象,比如图片、音频等。
两者存在缺点和限制:1.不能有默认值。2.在遇到使用临时表的情况瞎,无法使用内存临时表。3.检索效率比 char 和 varchar 低。4.不能直接创建索引。5.会消耗大量的网络和 IO 带宽
MySQL 支持多种存储引擎【比如 InnoDB、MyISAM、Memory等】,可以通过 show engines 命令来查看
MySQL 默认的存储引擎是 InnoDB,所有的存储引擎中只有 InnoDB 支持事务【5.5.5 之前 MyISAM 是MySQL 的默认存储引擎,5.5.5 版本之后是 InnoDB】
MySQL 存储引擎采用的是插件式架构,支持多种存储引擎,使用的时候可以为不同的数据库表设置不同的存储引擎【存储引擎是基于表的,而不是数据库】
MyISAM 只有表级锁,而 InnoDB 支持行级锁和表级锁,默认为行级锁
MyISAM 不提供事务支持,而 InnoDB 提供事务支持,实现了 SQL 标准定义了四个隔离级别,拒用提交和回滚事务的能力
一般情况瞎,选择 InnoDB 是没有问题的,如果并不在乎可扩展能力和并发能力,也不需要事务支持和崩溃后的安全恢复问题,那也可以选择 MyISAM,但通常在项目中这些都需要考虑
索引是一种用于快速查询和检索数据的数据结构,本质可以看作是一种排序号的数据结构【比如看书的时候,如果存在了目录,就可以通过目录来快速定位】
数据表的主键列使用的就是主键索引。一张数据表中只能有一个主键,并且主键不能为 null,不能重复【Mysql 的 InnoDB 的表中,当没有显示指定表的主键时候,InnoDB 会自动检查表中是否有唯一索引且不允许存储 null 值的字段,如果有,则选择该字段为默认的主键,没有 InnoDB 会自动创建一个自增主键】
执行查询语句的时候,会先查询缓存,但 MySQL 8.0 后就移除了。开启查询缓存后在同样的查询条件以及数据情况瞎,会直接在缓存中返回结果。这里的查询条件包括查询本身、当前查询的数据库、客户端协议版本号等一些可能影响结果的信息
缓存虽然能够提升数据库的查询性能,但缓存同时也带来了额外的开销,每次查询后都要做一次缓存操作,失效后还要销毁,占用了大量的内存,还有就是影响并发性能【当并发用户越来越多的时候,这样的缓存机制就会导致大量请求阻塞在同一个锁上,从而降低了并发性能】
为了保证数据的一致性,事务是逻辑上的一组操作,这一组操作要么都执行成功,要么都执行失败【比如张三要给李四转账1000,张三余额减少 1000和李四余额增加 1000,这两个操作要么都成功,要么都失败】
数据库事务可以保证多个对数据库的操作构成一个整体,这个整体对数据库的操作要遵循:要么全部成功,要么全部失败
不可重复读的重点是内容修改或者记录减少,比如多次读取一条数据发现有些记录的值被修改。幻读的重点在于记录新增比如多次执行同一条查询语句时候,发现查到的记录增加了