关系型数据库—采用关系模型来组织数据的数据库
关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
数据类型
数值类型
MySql支持所有标准SQL数值数据类型。
类型大小(字节)描述TINYINT1小整数值
SMALLINT2大整数值
MEDIUMINT3大整数值
INT或INTEGER4大整数值
BIGINT8极大整数值
FLOAT4单精度浮点数
DOUBLE8双精度浮点数
DECIMALDECIMAL(M, D),如果M>D为M+2,,否则为D+2小数值
日期和时间类型
每个时间类型都有一个有效值范围和一个“零”值,当指定不合法的MySql不能表示的值时使用“零”值。
类型大小(字节)描述DATE3YYYY-MM-DD
TIME3HH:MM:SS
YEAR1YYYY
DATETIME8YYYY-MM-DD HH:MM:SS
TIMESTAMP4YYYYMMDD HHMMSS
字符串类型
类型大小(字节)描述CHAR0-255定长字符串
VARCHAR0-65 535变长字符串
TINYBLOB0-255不超过255个字符的二进制字符串
TINYTEXT0-255短文本字符串
BLOB0-65 535二进制形式的长文本数据
TEXT0-65 535长文本数据
MEDIUMBLOB0-16 777 215二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215中等长度文本数据
LONGBLOB0-4 294 967 295二进制形式的极大文本数据
LONGTEXT0-4 294 967 295极大文本数据
ACID属性
原子性
隔离性—-> 在所有的操作没有执行完之前,其他会话不能够看到中间改变的过程
一致性—-> 事务发生前后,数据总额匹配
持久性
InnoDB
是一个事务型引擎,支持回滚,具有崩溃恢复能力,支持行级锁定、ACID事务。
工作原理—-> 把数据从磁盘加载内存中,被用户进行读写,这样增加了性能。其设计理论就是充分利用内存,减少磁盘IO使用率,每次版本升级,改善最多的就是这些方面。
事务的实现
mysql在进行事务处理的时候使用的是日志先行的方式,来保证事务可快速和持久运行的,也就是在写数据前,要先写日志—包括事务日志和撤销日志(可以利用撤销日志将数据回滚到修改之前的样子)。
性能调优
表的设计—-基本满足第三范式(不存在非关键字段对任一候选关键字段的传递函数依赖)
采用合适的锁机制—-InnoDb引擎属于行级锁(开销大,加锁慢,会出现死锁,但并发度高)
选择合适的事务隔离级别
sql优化与合理利用索引—-生产环境避免使用子查询,可用left join表连接取代;select的字段正好是索引,那么就用到了覆盖索引,通过覆盖索引可以减少I/O,提高性能;加上辅助索引—-sql中or条件,则用不到索引