MySQL
内部数据集在磁盘上, 某一次读取操作, 消耗的代价是巨大的.
所以要使用索引
- 连接管理器
- 线程管理器
- 用户管理器 : 用户的访问还受访问控制器的限制
约束
主键约束 : 唯一非空,一张表只能有一个
外键约束 : 参考性约束, 引用性约束
唯一键约束 : 唯一, 可存在多个
检查性约束 : 对值进行检查
MySQL事务
事务 : 一组原子性的SQL查询, 或者多个SQL 语句组成了一个独立的工作单元
事物日志 : 将随机写改为顺序写
- 相关的配置参数( 建议在启动之前修改, 启动后临时修改无效, 必须重启服务才能生效)
innodb_log_file_size 5242880
innodb_log_files_in_group 2
innodb_log_group_home_dir ./
ACID 测试
- A : automaticity 原子性, 整个事物中所有操作要么全部成功执行, 要么全部失败后回滚
- C : consistency 一致性, 数据库总是从一个一致性砖塔转换为另一个一致性状态
- I : isolation 隔离性, 一个事物所做出的操作在提交之前, 是不能为其他事务缩减, 隔离有多种级别, 主要是为了并发
- D : durability 持久性, 事务一旦提交, 其所做的修改会永久保存于数据库中
事物 : 推荐使用innodb 存储引擎, MySQL 默认把每个语句作为一个事务来进行提交
启动事务 : START TRANSACTION
结束事务 :
- 完成, 提交 : COMMIT
- 未完成, 回滚 : ROLLBACK
事物支持savepoint :
SAVEPOINT indentifier;
ROLLBACK TO [SAVEPOINT] identifier;
RELEASE SAVEPOINT indentifier;
默认启用自动提交功能
SHOW GLOBAL VARIABLES autocommit;
autocommit ON
#启动事务
START TRANSACITON;
#回滚事务
ROLLBACK;
#关闭自动提交后, 使用COMMIT 进行提交
COMMIT;
建议显示请求和提交事物, 不要使用自动提交功能
关闭自动提交功能, 在配置文件中写入
autocommit=OFF
重启服务即成功
事务的隔离级别 :
- READ UNCOMMITTED ( 读未提交 ) –> 脏读
- READ COMMITTED ( 读提交 ) –> 不可重复读(同一数据两次读取结果不同)
- REPEATABLE READ ( 可重复读 ) –> 幻读(两次读取内容, 新数据无法显示)[MySQL默认]
- SERIABLIZABLE ( 可串行化 ) –> 性能不佳
定义的变量为 : tx_isolation
锁
查看innodb 存储引擎基本状态信息
SHOW ENGINE innodb STATUS;