简述在MYSQL数据库中MyISAM和InnoDB的区别
不支持事务,但每次查询都是原子的;
支持表级锁,每次操作对整个表加锁;
存储表的总行数;
一个MYISAM有个三个文件:表结构文件、 索引文件 、数据文件;
采用非聚集索引,索引文件的数据域存储指向数据文件的指针,辅索引与主索引基本一致,但是辅索引不用保证唯一性
InnoBD:
支持ACID的事务,支持事务的四种隔离级别;
支持行级锁及外键约束;可支持写并发;
不存储总行数:
一个InnoDb引擎存储在一个文件空间(共享表空间,表大小不受操作系统控制,一个表可能分布在多个文件里),也有可能多个(设置为独立表空间,表大小受操作系统控制,一般为2G),受操作系统文件大小的控制;
主键索引采用聚集索引(索引的数据域存储文件本身),辅索引的数据域存储主键的值,因此从辅索引查找数据,先通过辅索引找到主键值,再访问辅索引;最好使用自增主键,防止插入数据时,为维持B+树结构,文件的大调整。
MYSQL中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?
1. read uncommited 已读未提交数据
2.read commmited 脏读,不可重复读
3. repeatable read 可重复读
4.serializable 串行事务
CHAR 和 VARCHAR的区别
VARCHAR是变长字符串。
1、CHAR 和 VARCHAR 类型在存储和检索方面有所不同
2、CHAR 列长度固定为创建表时声明的长度,长度值范围是 空格填充到特定长度,检索 CHAR 值时需删除尾随空格
为了便于理解,我用CHAR定长类型来对比介绍。先看两个小例子:
VARCHAR(4),最多存储4个字符,有几个字符存储几个。存储字节数 = 数据值的字节和 + 1字节(长度标识,后面会讲到)
CHAR(4),最多存储4个字符,不足4个尾部用空格填满。存储字节数 = 数据值的字节和 + 补位空格数
概括地说,VARCHAR和CHAR都是MySQL的字符串类型,存储多个字符、可设置最大存储的字符数,存储开销都与数据长度、字符集有关。是MySQL最常用的字符串类型。
主键和候选键的区别
表格的每一行都有主键标识,一个表只有一个主键
主键也是候选键,候选键可以被指定为主键,并可以用于任何外键引用。
myisamchk 是用来做什么的?
用来压缩MyISAM,减少磁盘或者内存使用
MyISAM Static 和 MyISAM Dynamic有什么区别?
在MyISAM Static 上的所有字段有固定宽度,动态MyISAM表具有像TEXT,BLOB等字段,以适应不同长度的数据类型
MyISAM Static在受损情况下更容易恢复,
如果一个表有一列被定义为 TIMESTAMP,会发生什么?
每当行被更改时,时间戳字段将会获取当前时间戳
列设置为AUTO INCRMENT时,如果在表中达最大值,会停止递增,任何进一步的插入都将产生错误,因为密钥已被停用。
怎样才能找出最后一次插入时分配了哪个自动增量?
LAST_INSERT_ID将返回有Auto_increment分配的最后一个值,并且不需要指定表名称
怎样看到为表格定义的所有索引?
SHOW INDEX FROM <tableName>;
LIKE 声明中的%和_是什么意思?
%对应0个或者更多字符,_只是LIKE语句中的一个字符。
如何在unix和MySQL 时间戳之间转换?
UNIX_TIMESTAMP是MySql时间戳转换为Unix时间戳的命令
FROM_UNIXTIME是从Unix时间戳转换为MySql时间戳的命令
列对比运算符有<>,=,<=,<,>,>=,<<,>>,<=>,AND,OR,LIKE.