1.说说数据库的三范式?
答:
第一范式:数据库表的每一列都是不可分割的原子数据项。
第二范式:非主键列完全依赖于主键,而不能只是依赖于主键的一部分。
第三范式:非主键列只依赖于主键,不依赖于其他非主键。
2.如何获取当前数据库的版本?
答:使用select version()来获取当前Mysql数据库的版本。
3.了解事务么?
答:事务是由一步或几步数据库操作序列组成的逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行。
4.说说事务的4个特性?
答:ACID。
5.A是什么?
答:Atomicity,原子性,代表着一个事务中的所有操作,或者全部完成,或者全部不完成,如果事务在执行过程中发生错误,就会被回滚到事务开始前的状态。
6.C是什么?
答:Consistency,一致性,事务执行的结果,必须使数据库从一个一致性状态,变到另一个一致性状态。当数据库中只包含事务成功提交的结果时,数据库处于一致性状态。一致性是通过原子性来保证的。
7.I是什么?
答:Isolation,隔离性,由于数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性是防止多个事务在并发执行时发生交叉执行而导致数据的不一致结果。
8.D是什么?
答:Durability,持久性,只要事务成功提交了,那么对于数据的修改就是永久的,即使系统崩溃也不会影响到这个事务的结果。
9.说说char类型的特点?
答:比如定义了char(10),那么这个长度就是固定的,哪怕输入的只是"abcd"4个字符,占用的空间依旧是10个字节,其他的7个就是空字节。不过char虽然占用空间,但是它的效率高,适用于存储密码的md5值,只要是长度固定的,那么使用char类型就很不错。
10.说说varchar类型的特点?
答:varchar类型长度是可变的,存储的值是每个值占用的字节再加上一个用来记录其长度的字节的长度,所以相比起char类型来说,varchar在空间的使用上比较合理,而char则以空间换时间,效率较高。
11.说说MySQL中有哪几种锁?
答:表级锁,行级锁,页级锁
12.说说表级锁的特点?
答:开销小,加锁快,不会出现死锁,但是一锁就是锁整个表,所以锁定粒度大,会发生锁冲突的概率最高,并发度是最低的。
13.说说行级锁的特点?
答:开销大,加锁慢,会出现死锁,锁的是表中的行,锁定粒度最小,发生锁冲突的概率最低,所以并发度也是最高的。
14.说说页面锁的特点?
答:开销和加锁时间介于表锁和行锁之间,也会出现死锁,锁定粒度介于表锁和行锁之间,并发度一般。
15.什么是候选键?
答:候选键是对具有关系键特性的一个或多个属性(组)的统称。
16.主键和候选键有什么区别?
答:表格的每一行都由主键唯一标识,一个表只有一个主键,而主键也是候选键,按照惯例,候选键可以被指定为主键,并且可以用于任何外键引用。
17.在Mysql中ENUM的用法是什么?
答:ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,如果这个字段中的值类型是固定的几种,建议可以使用ENUM。
18.说说Mysql驱动程序是什么?
答:Mysql驱动程序是Mysql数据库开发商为了某一种开发语言环境(比如java)能够实现统一的数据库调用而开发的一个程序。
19.说说Mysql驱动程序有哪几种?
答:所以
PHP驱动程序
JDBC驱动程序
ODBC驱动程序
CWRAPPER
PYTHON驱动程序
PERL驱动程序
RUBY驱动程序
CAP11PHP驱动程序
Ado.net5.mxj
20.一张表,里面有ID自增主键,当insert了16条记录之后,删除了第15,16条记录,再把Mysql重启,再insert一条记录,这条记录的ID是17还是15 ?
答:如果表的存储引擎类型是MyISAM,ID就是17,因为MyISAM类型的表会把自增的最大ID记录在数据文件里,即使Mysql重启,最大ID也不会丢失。而如果表的存储引擎类型是InnoDb,因为InnoDb类型的表只会把自增的最大ID存在内存中,所以重启数据库或者是对表进行OPTIMIZE操作,都会导致最大ID丢失。
21.说说MySQL数据库中MyISAM类型表的特点?
答:
一个MYISAM类型的表中有三个文件,分别是索引文件、表结构文件、数据文件
MYISAM类型的表,不支持事务,但是每次查询都是原子操作
支持表级锁,每次操作都是对整个表加锁
会存储表的总行数
采用的是非聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致,但是辅索引不用保证唯一性。
22.说说MySQL数据库中InnoDb类型表的特点?
答:一个InnoDb引擎存储在一个文件空间(共享表空间,表大小不受操作系统控制,一个表可能分布在多个文件里),也有可能为多个(设置为独立表空间,表大小受操作系统文件大小限制,一般为 2G),受操作系统文件大小的限制
支持ACID的事务,支持事务的四种隔离级别
支持行级锁及外键约束,因此可以支持写并发
不存储总行数
主键索引采用聚集索引(索引的数据域存储数据文件本身),辅索引的数据域存
储主键的值。因此从辅索引查找数据,需要先通过辅索引找到主键值,再访问主键索引(回表)。最好使用自增主键,防止插入数据时,为维持B+树结构,文件做大的调整
23.说说MySQL中InnoDB支持的四种事务隔离级别?
答:
read uncommited :读到未提交数据
read committed:读已提交数据
repeatable read:可重读
serializable :串行事务
24.myisamchk是用来做什么的?
答:用来压缩 MyISAM 表,减少了磁盘或内存的使用。
25.MyISAM Static 和 MyISAM Dynamic 有什么区别?
答:在 MyISAM Static 上的所有字段有固定宽度。MyISAM Dynamic就是有像 TEXT,BLOB这样的字段,用来适应不同长度的数据类型,简单说就是会变,就是动态的。所以MyISAM Static在受损情况下更容易恢复。
26.如果一个表有一列定义为TIMESTAMP,将发生什么?
答:每当行被更改时的时候,时间戳字段将获取当前时间戳。
27.列设置为AUTO INCREMENT时,如果在表中达到最大值,会发生什么情况?
答:它会停止递增,任何进一步的插入都将产生错误,因为密钥已经被使用了。
28.怎样才能找出最后一次插入时分配了哪个自动增量?
答:LAST_INSERT_ID 将返回由Auto_increment分配的最后一个值,并且不需要指
定表名称。
29.怎么看到为表格定义的所有索引?
答: SHOW INDEX FROM +< tablename >。
30.说说NOW()和CURRENT_DATE()有什么区别?
答:NOW()命令可以显示当前年份,月份,日期,小时,分钟和秒,而CURRENT_DATE()只会h显示当前年份,月份和日期。