MySQL的重点知识
用MySQL开发的三个要点:storage engines、index、tx;
能建索引,了解事务的隔离级别以及 Spring 的事务。
存储引擎
myisam & innodb 对比
myisam 不支持事务;只有表锁;索引和数据分开;不支持故障恢复(高性能mysql)
myisam 支持全文索引,可用于读多写少的场景,小型报表系统。
innodb 支持事务;采用索引组织表的结构;支持故障恢复
innodb可用于海量数据(百万级别)、高并发高可用场景。
事务
ACID和隔离级别
读未提交、读已提交、可重复读、可串行化 (解决幻读的问题)
无论别的事务怎么修改一行数据,看到的都是最开始的那个记录。
如何实现可重复读?MVCC:
对于创建的事务,可以看到<=事务id的版本
对于删除的事务,可以看到>=当前事务id的版本
举例!画表格来举例
MySQL 的锁
表锁,行锁,
Myisam的表锁
读写互斥,插入数据导致无法读取,504超时。
innodb的行锁
增删改 会加锁。
悲观锁、乐观锁
for update:悲观锁
select verison:乐观锁
MySQL 调优
讲清楚:90%都是单表查询。子查询,join都在代码里完成。
sql都很简单,只需要 explain,看执行计划。
数据库的表
建一张表时,可配置存储引擎。
字符型的都用`包起来,避免和保留字段冲突<br />// 排序规则是utf8_general_ci,代表对大小写不敏感<br />//utf8_bin`,代表对大小写敏感
DROP TABLE IF EXISTS `player`;CREATE TABLE `player` (`player_id` int(11) NOT NULL AUTO_INCREMENT,`team_id` int(11) NOT NULL,`player_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`height` float(3, 2) NULL DEFAULT 0.00,PRIMARY KEY (`player_id`) USING BTREE,UNIQUE INDEX `player_name`(`player_name`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;你
数据库的常见约束
主键约束
外键约束
唯一性约束,设置唯一约束时会建索引
对已经冲突的数据,设置唯一键约束,自动删数据?
数据库服务器、库、表的关系
具体问题:对一个表建索引,会影响客户端访问别的表吗?
