面试题

1.char(32)和varchar(32)的区别
(1):char和varchar都是数据库定义字符串类型的数据格式,char是一种定长度的类型,varchar是一种可变长度的类型。
(2):char(32)表示定义了当前字段所占用的存储空间为32个字符,不管字段长度是否达到32,占用的空间是不变的。而varchar(32)表示定义了当前字段所能够占用的最大存储空间是32个字符,实际占用空间是字段的大小。
(3):就存储效率而言,定长的char类型由于一开始就定义好了字段占用空间,不需要根据字段的长度在去申请空间,故效率相对较高,但是在占用空间上就没有varchar有优势。而varchar由于根据字段长度调整空间占用,故空间消耗较小,但是存储效率不高。

2.sql注入,如何避免sql注入
概念: 所谓sql注入, 就是攻击者将sql命令插入到web表单的输入域或者是页面请求的查询字符串,欺骗服务器执行恶意的sql命令。(某些表单中的输入命令被直接用来构造(或影响)sql命令,或者是构成存储过程的输入参数, 这类表单特别容易受到sql注入式攻击)。
如何避免:
(1): mybatis中多使用[#{param}],尽量避免使用[${param}],原因在于[${param}]会直接参与sql编译,容易造成sql攻击。

3.数据库的三大范式
第一范式: 每一列都是一个不可再分割的属性值,确保每一列的原子性(规范列)。
第二范式: 在满足第一范式的要求下,每一行数据只做一件事(规范行)。
第三范式: 在满足第二范式的要求下,确保数据表中的每一列数据都和主键直接相关,而不能够间接相关。