MySQL数据库相关

1、内联,左外联,右外联,全连接,交叉连接的区别

2、什么是视图?以及视图的使用场景有哪些?

视图是一种虚拟的表,具有和物理表相同的功能
只暴露部分字段给访问者,所以就建一个虚表,就是视图。
查询的数据来源于不同的表,而查询者希望以统一的方式查询,这样也可以建立一
个视图,把多个表查询结果联合起来,查询者只需要直接从视图中获取数据,不必
考虑数据来源于不同表所带来的差异

3、视图作用

数据库视图隐藏了数据的复杂性。
数据库视图有利于控制用户对表中某些列的访问。
数据库视图使用户查询变得简单。

4、说一下事务的特性?

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

5、SQL注入原理

sql 注入漏洞产生的原因最常见的就是字符串拼接SQL 语句,这种漏洞可以利用注
释语句绕过验证
如 select name from userinfo where name=‘alex’ and password = ‘888’
用户如果在 name 字段输入 alex’ or 1=1 --f 就可以成功绕过验证。
要解决这个问题就不能在程序中拼接 sql 语句,例如使用 pymysql 的 execute 方法,
这个方法会自动对用户输入的引号特殊字符做转义

6、简单说一说 drop、delete 与 truncate 的区别

delete 和 truncate 只删除表的数据不删除表的结构
速度,一般来说: drop> truncate >delete
delete 语句是 del,这个操作会放到rollback segement 中,事务提交之后才生效;
如果有相应的 trigger,执行的时候将被触发。
truncate,drop 是 ddl, 操作立即生效,原数据不放到 rollback segment 中,不能回滚. 操
作不触发 trigger。
使用场景:
不再需要一张表的时候,用 drop
想删除部分数据行时候,用 delete,并且带上 where 子句
保留表而删除所有数据的时候用 truncate

7、数据库怎么优化查询效率?

  1. 在where、join on、orderby使用到的字段上加上索引,防止查询时判断null,可能会导致全表扫描
  2. 避免使用or来连接查询条件,可能导致全表扫描,可以用union或者union all
  3. 避免使用like查询,否则会全表查询
  4. 不使用select *,只查询必须的字段
  5. 能用 UNION ALL 的时候就不用 UNION,UNION 过滤重复数据要耗费更多的 cpu资源
  6. 避免 Update 全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志
    总结:
    1)避免模糊查询,or ,like
    2)在常用字段加索引,例如 WHERE、JOIN ON 和 ORDER BY 使用到字段上应该加索引
    3)尽量避免全局性的读写操作,例如 SELECT * 、Update 全部字段

你可能感兴趣的:(面试问题,数据库,mysql,oracle)