是什么?
关系型数据库(一个结构化的数据集合)
存储在磁盘上
存储的都是二维表,行称记录,列称字段,支持SQL语句
能干啥?
- 存储大量数据,方便检索跟访问
- 保存信息,保证数据信息的一致和完整
- 共享与安全
- 通过组合分析产生有用的信息
那为什么使用mysql呢?文件也能存数据,为什么用数据库?
- mysql和文件都在磁盘上存储,那他们的性能瓶颈在磁盘IO上
- mysql支持SQL,直接通过SQL语句对数据进行操作特别方便
- mysql支持并发操作
- mysql是C/S模型的,分布式起来非常简单
- mysql还支持索引,存储引擎
mysql优点:
- 免费开源,体积小,速度快,成本低
- 高效,mysql核心采用多线程编程,支持多处理器,支持大量数据查询和存储,可以承受大量的并发访问
- 有多种列类型:1、2、3、4、和8字节长度自有符号/无符号整数、FLOAT、DOUBLE、CHAR、VARCHAR、TEXT、BLOB、DATE、TIME、DATETIME、TIMESTAMP、YEAR、和ENUM类型。
- 它通过一个高度优化的类库实现SQL函数库并像他们能达到的一样快速,通常在查询初始化后不该有任何内存分配。没有内存漏洞。
- 全面支持SQL的GROUP BY和ORDER BY子句,支持聚合函数(COUNT()、COUNT(DISTINCT)、AVG()、STD()、SUM()、MAX()和MIN())。你可以在同一查询中混来自不同数据库的表。
- 支持ANSI SQL的LEFT 0UTER JOIN和ODBC。
- 所有列都有缺省值。你可以用INSERT插入一个表列的子集,那些没用明确给定值的列设置为他们的缺省值。
- MySQL可以工作在不同的平台上。支持C、C++、Java、Perl、PHP、Python和TCL API。可移植性强
- 复制:MySQL从3.23.15这个版本开始,支持了replication,可以帮助MySQL使用者搭建Master-Slave的架构。把数据准实时的从一个实例同步到另一个实例。
- 引擎:MySQL不同于其他多数数据库之处是它对插件式存储引擎的支持
MySQL的缺点:
- mysql的安全系统,复杂而非标准,只有到调用mysqladmin来重读用户权限时才发生改变。
- 缺乏标准的RI(Referential Integrity-RI)机制;Rl限制的缺乏(在给定字段域上的一种固定的范围限制)可以通过大量的数据类型来补偿。
- MySQL没有一种存储过程(Stored Procedure)语言,这是对习惯于企业级数据库的程序员的最大限制。
- MySQL不支持热备份。
索引的底层实现原理
(InnoDB存储引擎索引的存储方式)
主键索引:叶子节点存主键和对应的整行数据
辅助索引:叶子节点存的是该辅助字段值和对应的主键值
MySQL 事务
什么是事务?
数据库操作语句。
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
事务用来管理 insert,update,delete 语句
事务是必须满足4个条件(ACID)
- 原子性(Atomicity,或称不可分割性)
一致性(Consistency) - 隔离性(Isolation,又称独立性)
- 持久性(Durability)
原子性 A
一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。
事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性 C
在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
隔离性 I
数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
事务隔离分为不同级别,包括
- 读未提交(Read uncommitted):脏读,不可重复读和幻读 都可能发生
- 读提交(read committed):可重复读和幻读 都有可能发生
- 可重复读(repeatable read):幻读有可能发生
- 串行化(Serializable):脏读,不可重复读和幻读都不会发生
持久性 D
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失