mysql基础面试题大全

1.数据库是什么?

数据库(datebase)是按照数据结构来组织、存储和管理数据的仓库

2.写出表的增删改查SQL语法

表的创建:create table表名(列名1类型 约束,列名2 类型 约束…)
表的删除:drop table 表名
表的更改 :结构的更改,不是记录的更新:alter table表名 add|drop 列名|约束名
插入记录:insert into 表名 …values…
更新记录:update 表名 set 列名=值 where 条件
删除记录:delete from 表名 where 条件

3.SQL的表连接方式有哪些?

内连接、外连接(左连接、右连接)交叉连接(笛卡儿乘积)

4.什么是三范式?

1NF:表中的字段都是单一属性,不可再分
2NF:在1NF的基础上,表中所有的非主属性必须完全依赖于任意一组候选键,不能依赖于候选键中的某个属性
3NF:在2NF的基础上,表中所有的书信都不能依赖其他非主属性不存在对主键部分依赖,3NF表示不存在的非主属性对主的依赖传递

5. mysql存储原理

储存过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成,当希望在不同程序或平台上执行相同的函数,或者封装特定功能时,村存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式,存储过程通常有以下几个优点:
1.存储过程能实现较快的执行速度
2.存储过程允许标准组件是编程
3.存储过程可以用流程控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的判断和较复杂的运算
4.存储过程可被作为一种安全制来充分利用
存储过程能够减少网络流量

6.事务的特性

1.原子性(Atomicity):事务中的全部操作在数据库中不可分割,要么全部完成,要么均不执行
2.一致性(Consistency):几个执行结果必须与按某一顺序串行执行的结果一致
3.隔离性:事务的执行不受其他事务 的干扰,事务执行的中间结果对其他事务必须是透明的
4.持久性:对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障

7.简述什么是存储过程和触发器

存储过程:是数据库中的一个对象,Transact-SQL语句的预编译集合,这些语句在一个名称下存储并作为一个单元进行处理(可以理解为C语言中的函数,有参数、返回值等函数特性)触发器是一种特殊类型的存储过程,当使用下面一种或多种数据修改操作在指定表终端对数据进行修改时,触发器会生效:UPDATE,INSERT,或DELETE

8.什么是数据库索引

数据库索引是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据表中的数据,索引的实现通常使用B_TREE,B_TRBBB索引加速了数据访问,因为存储引擎不会再去扫描整张表得到需要的数据:相反,他从跟节点开始,根节点保存了子节点的指针,存储引擎会根据指针快速寻找数据

9.数据库怎么优化查询效率?

1.储存引擎选择:如果数据表需要事务处理,应该考虑使用innoDB,因为她完全符合ACID特性,如果不需要事务处理,使用默认存储引擎MyISAM是比较明智的
2.分表分库,主从
3.对查询进行优化,要尽量避免全表扫描,首先应考虑Where及orderby涉及 的列上建立索引
4.应尽量避免在Where子句中对字段进行null值判断,否则将导致引擎的放弃使用索引而进行全表扫描
5.应尽量避免子啊where子句中使用or连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描
7.update语句,如果只更改1,2个字段,不要update全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志
8.对于多张大数据量(这里几百条就算大了)的表join,要先分页在join,否则逻辑读会很高,性能很差

10.你用的mysql引擎是哪个,个引擎之间有什么区别?

主要MyISAM与InnoDB两个引擎,其主要区别如下:InnoDB支持事务,MySAM不支持,这一点是非常重要的,事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了
MyISAM适合查询以及插入为主的应用,InooDB适合频繁修改以及涉及到安全性较高的应用
innoDB支持外键,MyISAM不支持
MyISAM是默认引擎,InnoDB需要指定:InnoDB不支持FULLTEXT类型的索引
InnoDB中不保存表的行数,如select count()from table 时,innoDB:需要扫描一遍整个表来计算多少行,但是MyISAM只要简单的读出保存好的行数即可,注意到是,当count()语句包含where条件时MyISAM也需要扫描整个表
对于自增长的字段InnoDB中必须包括只有该字段的索引,但是在MyISAM中可以和其他字段一起联合索引:清空整个表时,InnoDB是一行一行的删除效率慢,MyISAM则会重建表,InnoDB支持行锁(某些情况下还是锁整表,如uopdate tabkle set a=1 where like’%lee%‘

11.如何对查询命令进行优化?

(1)应尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引
(2)应尽量避免在where子句中对字段进行null值判断,避免使用!=或<>操作符,避免使用or连接条件,或在where子句中使用参数、对字段进行表达式或函数操作否则会导致权标扫描
(3)不要在where子句中的”=“左边进行函数算数运算或者其他表达式运算,否则系统将可能无法正确使用索引
(4)使用索引字段作为条件时,如果该索引是符合索引,那么必须使用该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引不会被使用
(5)很多时候可考虑用EXISTS代替in
(6)尽量使用数字型字段
(7)尽可能使用varchar/nvarchar代替char/nchar
(8)任何地方都不要使用select from t 用具体的字段代替”“,不要返回用不到的任何字段,尽量使用变量来代替临时表
(9)避免频繁创建和删除临时表,以减少系统表资源的消耗
(10)尽量避免使用游标,因为游标的效率较差
(11)在所有存储过程和触发器的开始处设置SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF
(12)尽量避免大事务操作,提高系统并发能力
(13)尽量避免像客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理

12.注入是如何产生的,如何防止?

程序开发中不注意规范书写sql语句和特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。产生SQL注入,下面是防止办法:
(1)过滤掉一些常见的数据库操作关键字,或者通过系统函数来进行过滤
(2)在PHP配置文件中将Register_globals=off;设置为关闭状态
(3)SQL语句书写的时候尽快不要省略小引号(tab 键上面那个)和单引号
(4)提高数据库命名技巧,对于一些重要字段根据程序的特点命名,取不易被猜到的
(5)对于常用的方法进行封装,避免直接暴漏SQL语句
(6)开启PHPAA安全模式:safe_mode=on
(7)打开magic_quotes_gpc来防止SQL注入
(8)控制使用错误信息:关闭错误提示信息,将错误信息写到系统日志
(9)使用mysql或pdo预处理

13.Mysql数据库中怎么实现分页?

select*from table limit(start-1)*limit,limit;
其中start是页码,limit是每页显示的条数

14.存储过程和函数的区别?

存储过程和函数都是为了可重复的执行操作数据库sql语句的集合
(1)存储过程和函数都是一次编译,都会被缓存起来,下次使用就直接命中已经编译好的sql语句,不需要重读使用,减少网络交互,减少网络访问流量
不同点:标识符不同,函数标识符function,存储过程是proceduce
(1)函数中有返回值,且必须有返回值,而过程没有返回值,但是可以通过设置参数类型(in,out)来实现多个参数或返回值
(2)存储函数使用select调用,存储过程需要使用call调用
(3)select语句可以在存储过程中调用,但是除了select…into之外的select语句都不能在函数中使用
(4)通过in out参数,过程相关函数更加灵活,可以返回多个结果

你可能感兴趣的:(初级测试,mysql,数据库,面试)