varchar和char的区别
- char的长度是不可变的,存储时不足填充空格,取出时去掉空格,存储速度快,容易造成空间浪费,存储超出长度的字符时会报错.
- varchar长度可变,最大65535个字节,额外字节存储长度,如果列的最大长度小于255字节,使用1个字节表示,否则使用2个字节,如果字段可以为null,还需要额外的1个字节来标记 最大长度 = 字段长度 + [长度记录:(1或2) B] + [null标志位:1B]
mysql规定每行数据总长度不能超过65535个字节,想要不受限制,就是用text和blobs类型
例如:编码是utf8mb4,id的int(11)需要4个字节,所以article的最大长度(65535-4)/4 = 16382, 因此最多 varchar(16382)
如果是utf8编码
Innodb与Myisam引擎的区别与应用场景
mysiam: 非聚集索引,支持全文索引,只支持表锁,不支持事务,外键,适合查询量大,更新小的场景保存了总行数
Innodb: 聚集索引,支持事务和行级锁,5.6后支持全文索引
当语句没有使用索引,innodb不能确定操作的行,这个时候就使用的意向锁,也就是表锁
死锁:两个事务都需要获得对方持有的排他锁才能完成事务,这样就导致了循环锁等待 1.设置死锁等待超时时间 2.应用尽量约定程序对表的操作顺序 3.短事务