mysql面试题

117 阅读1分钟

varchar和char的区别

  1. char的长度是不可变的,存储时不足填充空格,取出时去掉空格,存储速度快,容易造成空间浪费,存储超出长度的字符时会报错.
  1. 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.短事务