面试之mysql

萝らか妹 提交于 2020-01-10 00:15:41

1.数据库三范式是什么?
a.第一范式:字段具有原子性、不可再分(所有关系型数据库都满足)
b.第二范式:需满足第一范式,要求数据库表中的每个实例或行可以被唯一区分。
c.第三范式:需满足第二范式,要求一个数据库表,不包含已在其它表中包含的非主关键字信息
2.优化相关
a.用PreparedStatement,一般来说比Statement性能高
b.有外键约束会影响插入和删除性能,如果程序能保证数据完整性,设计数据库时就去掉外键
c.表种允许冗余.
d.union all 要比 union快很多 ,所以不考虑重复数据和排序的话 使用union all
3.索引种类
a.普通索引:针对数据库表创建的索引
b.唯一索引:与普通索引类似,不同的是数据库索引列的值必须唯一, 允许空
c.主键索引:特殊的索引,不允许空,在建表时同时创建主键索引
d.组合索引:讲数据库表中的多个字段,联合起来 组成一个 组合索引.
4.索引的工作机制
a.数据库索引,是数据库管理系统中的 一个排序的数据结构,用于协助快速查询、更新数据库表中的数据。 索引的实现通常使用的是B树及其变种B+树。
5.myisam与 innodb的区别
a.事物:myisam特点是性能,每次查询具有原子性,其执行速度比innodb类型快,不支持事物。innodb提供事物支持,commit、rollback
b.锁:innodb:行级锁,myisam 表锁。
c.主键:myisam 允许没有任何索引和主键,innodb 如果没有设定主键或非空唯一索引,会自动生成一个
d.索引:innodb 不支持全文索引,myisam 支持
6.varchar与char的区别
a.varchar与char的区别:char是固定长度的类型,varchar是一种可变长度的类型。
7.innodb支持的四种事务隔离级别
a.Read Uncommitted 读取未提交内容 ,这个隔离级别,所有事物都可以看到其它事物 ,尚未提交的执行结果,项目中不可能使用 ,也被称为 脏读。
b.Read Committed 读取已提交内容 , 大多数数据库的默认隔离级别(不是mysql的),它满足了事物隔离的简单定义:一个事物 只能看见 已提交事物的内容。这个级别的事物,解决了脏读、但由于同一事物的其它实例在 这个实例处理期间,可能会有新的提交 ,所以会有不可重复读的问题。
c.Repeatable Read 可重复读 ,这个是mysql的默认隔离级别,它可以保证 同一事物的多个实例在并发读取数据时,会看到相同的数据。不过会有另一个问题 就是 ,幻读
d.Serializable 串行化 ,最高的隔离级别 ,通过强制事物排序,不可能相互冲突,但会有 超时、锁竞争等问题。
8.拆分表中大字段的好处?
a.大字段如(text,blob)类型的, 这些字段访问不多,这时候放在一起就成了问题,mysql数据库是按行存储的,数据块大小又是固定的16k ,每条记录越小,相同的块存储记录就越多,这时候就应该把大字段拆走,这样可以提升效率 、需要时在关联查询大字段
9.select * 与 select 全部字段 写法的优缺点
a.前者要解析数据字典,后者不需要
b.输出顺序不同,前者按照建表顺序、后者按照字段顺序
c.表字段更名,前者不需要更改,后者需要
d.后者可以建立索引优化,前者不可以
e.后者可读性高
10.having 与 where 的异同点
a.写法上 where 用表中的列名,having 用 select结果别名
b.影响结果范围 where从表中读取出的数据行,having是结果集的行
c.索引:where 可以使用索引,having不能使用索引。
d.where 后面不能使用聚合函数,having是专门使用聚合函数的.
11.sql 当记录不存在时插入,存在进行update 语句怎么写?
a.insert into table(a,b,c) values (1,2,3) on duplicate key update c=c+1;

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!