183.什么是关系型数据库?有哪些?
关系数据库就是建立在关系模型基础上的数据库。关系模型表明了各实体之间的联系。 关系数据库中的数据存储在表中,每一行就是一条数据。
常见的关系型数据库:mysql、oracle、sql server
184.什么是非关系型数据库?有哪些?
非关系型数据库又称nosql,即not only sql。与关系型数据库不同的是非关系型数据库不使用传统的表格和行结构来存储数据,而是采用更灵活的数据模型,如键值对(redis)、文档(mongoDB)、图形(neo4j)、列族(Bigtable)
185.什么是关系表?
关系表就是一个表,表中的每一行都是一个数据
186.关系型数据库的三大范式?
1NF:要求所有字段不可被分割 2NF:为了减少数据冗余,消除非主属性对码的部分函数依赖,使得非主属性完全函数依赖于码。如:有一个表包含学号,学生名称,课程号,课程名称,1号学生选了语文,2号3号学生也都选了语文,那么这个表就会有多个课程号,课程名称的冗余数据 3NF:进一步减少数据冗余,消除传递函数依赖,如:有一个表包含学号、专业、住处,学号能决定专业,学号也能决定住处,专业也能决定,住处。此时如果1号、2号、3号都是计算机专业,那么就会有多个住处的冗余
SQL语句
187.SQL语句可以分为哪几类?
DDL(data definition language)数据库定义语言 定义表结构,定义视图索引 DML(data manipulation language)数据库操纵语言 插入删除表中的数据 DQL(data query language)数据库查询语言 查询表中的数据 DCL(data control language)数据库控制语言 权限控制
188.删除表记录有哪两个SQL命令?
delete from 一条一条删,会触发触发器,操作会被记录在日志中(redo log)可回滚,速度慢 truncate 全部删除,不会触发触发器,操作不会被记录在日志中不可回滚,速度快
189.delete与drop的区别?
delete只删除数据,不删除表结构 drop删除数据和表结构
190.delete与truncate的区别?
delete from 一条一条删,会触发触发器,操作会被记录在重做日志中(redo)可回滚,速度慢 truncate 一次全删除,不会触发触发器,操作不会被纪律在重做日志中(redo)不可回滚,速度快
191.Select语句的执行顺序?
192.Group by的作用?什么是分组?
group by和聚合函数配合使用,group by按照某字段分组,再用聚合函数对每一组进行数据处理。
193.group by 与distinct的区别?
group by配合聚合函数使用,group by按照某一字段分组,再用聚合函数对每一组进行数据处理。 distinct过滤重复的元组
194.Order by 的作用?
按照某一属性进行排序,asc升序,desc降。
195.where和having的区别?
where是在分组后对数据过滤,having是在分组前对数据过滤。
196.聚合函数有哪些?
最大最小,平均求和计数
197.Limit的作用?
limit a,b 过滤出从第a位置开始的b条数据
198.drop有几种用法?
删除数据库,删除表,删除视图,删除索引,删除触发器
199.什么是SQL注入,如何防止SQL注入?
SQL注入是一种数据库攻击手段。 比如登录系统,用户输入账号和密码,服务器就会生成select * from table where username='' and password=''; 如果用户的账号输入'账号 -- ',由于-- 在mysql语句中为注释,所以-- 后面的内容不会被执行,即只要输入正确的账号就能登录网站
如何防止SQL注入:采用预编译技术。使用预编译技术可以使SQL语句不会发生语义变化。预编译执行器在创建的时候就会将SQL语句发送给数据库管理系统编译,所以攻击者无法改变语义,只能给?占位符赋值 严格限制数据库权限,提供给用户满足需要的最低权限。
事务 200.什么是事务?
事务是一系列不可分割的数据库操作,这些操作要么都执行,要么都不执行。 通过begin;可以开启事务,通过commit或rollback提交或回滚事务。
201.解释事务的ACID?
A(atomicity) 原子性--事务是一系列不可分割的数据库操作,这些操作要么都执行,要么都不执行 C(consistency) 一致性--事务执行后,数据库状态保持一致。如银行转账。一个用户的金额要增多,另一 个用户的金额要减少,不能凭空总金额变多了或变少了 I(isolation) 隔离性:多个事务并发执行时,事务和事务之间不会互相影响 D(durability) 持久性:事务执行成功后,事务的状态会被持久化到磁盘中的redo log(重做日志),即使mysql突然故障,也会通过redo log(重做日志)来恢复数据库的状态。
202.MySQL的隔离级别?默认是的哪个?
mysql默认隔离级别是REPEATABLE-READ
203.什么是脏读、不可重复读、幻读?
脏读:事务1读取到事务2修改后的数据,但事务2又回滚了。此时事务1读取到的就是脏数据 不可重复读:事务1读出一个数据为a,此时事务2修改了数据变为b并提交了事务,此时事务1再次读取数据 为b。同一个事务读取同一个数据读出的结果却不同就为不可重复读 幻读:事务1读出一个表有5条记录,此时事务2向表中增加了数据并提交了事务。此时事务1再读原来的表变 为6条数据,同一个事务读同一个表,读出的结果不同就为幻读
204.什么是MVCC? 205.MySQL的引擎有哪些?各自特点?
206.什么是索引?
索引是一种数据结构,用来快速查询数据。mysql中索引的底层数据结构打不是b+树
207.常见的索引有哪些?
主键索引:加速查询+列值唯一不为null+一个表只有一个主键索引 普通索引:加速查询 唯一索引:加速查询+列值唯一(可以有null) 联合索引:多个列值组成一个索引 全文索引:对文本的内容进行分词,进行搜索
208.主键索引和唯一索引有哪些特点?
主键索引:列值唯一不为null+一个表只有一个主键索引 唯一索引:列值唯一(可以有null)
209.什么是联合索引?
使用多个字段建立的索引 ICP(index condition pushdown)索引下推
210.什么是最左前缀原则?
创建联合索引时,把where子句使用最频繁的一列放在最左边。如有name,age字段的表,用name、age建立联合索引,单用age去查询是不能使用联合索引的,但是用name就可以,主要是因为b+树中的索引值是name在前age值在后,导致age在b+树中的比较没有意义。
211.聚集(聚簇)索引和非聚集(非聚簇)索引的区别?
聚集索引的索引和真正的数据在同一个文件,如InnoDB的主键索引 非聚集索引是指索引和真正的数据在不同的文件,如MyISAM的主键索引,其叶子节点的data域存储的是真正数据的地址,如普通索引和唯一索引,其叶子节点的data域存储的值是主键索引值
数据库优化 212.如何优化一个SQL语句? 213.如何分库分表?