不想(没钱)升级正式版的,只能先以这种形式看了。。。有空研究一下有什么好方法导出md类型的文件
这里只是读到了第四章的部分内容,以后有时间继续读。。。
大纲:
存储形式
mysql将每个数据库(schema)保存为数据目录下的一个子目录;
在创建表的时候,会在子目录下创建一个同名的.frm文件,并在其中保存表的定义
表定义:
表名 Name
引擎 Engine
格式(Innodb) Dynamic,Redundant,compressed,compact
and so on。。。
选择优化的数据类型
尽量小:选择能够正确存储数据的最小字段类型
尽量简单:在可以使用整形的时候就不必要用字符串类型
尽量避免null:
数据类型
整数
TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT(对应了8,16,24,32,64)
UNSIGNED,不可为负数,可存储范围大一倍
指定宽度的作用:INT(1),只是代表显示字符的个数,和存储无关
实数(带有小数部分的数字)
BIGDECIMAL 可以用来表示比BIGINT大的整数,用于精确计算,可制定小数前后位数,占用更大存储空间
FLOAT
DOUBLE
可以用BIGINT存储,自行计算比例
字符串
CHAR
定长数据(0~255),适合存储数据量较少的,明确知道其大小限制范围的数据;
但要注意,如果是字符串最后的空格会被截断!!!
这个基础上如果还经常变动值,则更为合适
VARCHAR
长度最多整行65535,会多1、2个额外字节存储字符串的长度,其存储字符串时会尽量少用存储空间,但是遇到变长的情景,会动态处理,影响一些效率,
TEXT
BLOB
时间
分支主题 3
mysql逻辑架构
客户端
连接器
缓存
解析器
优化器
并发控制
读写锁
在读/写过程中,读读共享;读写、写写相斥
锁粒度
表级锁
行级锁
事务
隔离级别
读未提交
读已提交
可重复读
串行
ACID
原子性
一致性
隔离性
持久性
事务日志
预写式日志
mysql中的事务
1、事务相关的引擎是跟随某张表的,一个事务中可以有两种引擎的表,如果有不支持事务的引擎,在回滚时会导致数据的不一致
2、mysql默认自动提交事务,即执行后自动提交。修改AUTOCOMMIT参数(0自动、1显示)可控制是否自动提交(除非表设置的引擎本身不支持事务)
3、注意有些DDL语句执行前会强制提交事务
多版本并发控制(MVCC)
概念:非阻塞,行级锁的变种、读写锁的效果
将某个时间点的数据以快照形式存储。
在某个时间点,不同事务看到的数据一致
事务开始时间不同,看到的数据不同
实现方式:每条数据后加两个隐藏列,分别记录了该行的创建时间和过期时间(存储的是时间值)
innodb下(repeat read情况)各个场景下实际情景:
insert:设置为当前操作的行版本号
delete:设置当前操作版本号到删除版本号
update:1、设置当前操作版本号到行版本号;2、设置当前版本号到删除版本号
select:根据当前操作版本号,查找小于等于自己的最大行版本号(能看到之前and本事务中修改过的数据)
注意:只有read commit 和repeat read才符合mvcc标准