数据库综合总结

数据库综合总结

Delete和Drop的区别

  • 当你不再需要该表时,使用drop关键字
  • 当你还需要该表但是需要删除所有数据时,使用truncate关键字(truncate table 表名)
  • 当你还需要该表但是只需要删除表记录时,使用delete关键字(delete from 表名)

端口号

  • nginx默认监听:80
  • mysql:3306
  • redis:6379
  • sentinel:26379
  • zookeeper:2181
  • dubbo:20880

id生成算法

主键自增并不适用于高并发的情况下,应该自己设置id的生成算法

事务的四种隔离级别

事务亟待解决的问题有:脏读,不可重复度,幻读

  1. 读未提交 Read uncommitted 事务最低的隔离级别(会引起脏读,不可重复度,幻读)
    一个事物可以读取到另一个事物未提交的数据
  2. 读已提交 Read committed (避免了脏读,但是会引起不可重复度,幻读)
    概念: 一个事务要等待一个事物完成提交后,才能进行读取操作,故解决了脏读的问题
    表示当两次同样的查询操作,查询出的两次结果是不同的,因为当中允许修改操作,故会引起不可重复读
  3. 可重复度 Repeatable read (避免了脏读,不可重复读)
    概念:表示当两次同样的查询操作,中间不在允许修改数据操作,故可以避免了不可重复读
  4. 序列化 Serializable 最可靠的事务隔离级别(还可以解决幻读的问题【幻读的问题也就是两个事物之间发生的insert操作)】

SQL包含哪些语言

数据定义语言 DDL(Data Define Language)
数据操纵语言 DML(Data Manipulation Language)
数据查询语言 DQL(Data Query Language)
数据控制语言 DCL(Data Control Language)
事务控制语言 TCL(Transaction Control Language)

数据库索引的作用

索引的一个主要目的就是加快检索表中数据的方法,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构.

什么适合索引,什么不适合索引

  • 主键自动建立唯一索引;
  • 频繁作为查询条件的字段应该创建索引;
  • 查询中与其他表有关联的字段,例如外键关系;
  • 频繁更新的字段不适合创建索引,因为每次更新不单单是更新记录,还会更新索引,保存索引文件;
  • where条件里用不到的字段,不创建索引;
  • 高并发的情况下一般选择复合索引;
  • 查询中排序的字段创建索引将大大提高排序的速度(索引就是排序加快速查找);
  • 查询中统计或者分组的字段;
  • 表记录太少,不需要创建索引;
  • 经常增删改的表;
  • 数据重复且分布平均的字段,因此为经常查询的和经常排序的字段建立索引.注意某些数据包含大量重复数据,因此他建立索引就没有太大的效果,例如性别字段,只有男女,不适合建立索引.

为什么要用sql占位符

防止sql注入.当传入的语句部分含有sql语句的关键字的时候,就会破坏sql语句的结构

数据库可以直接访问的请求连接的最大数是

最大值是500-1000左右.
故因此提出了缓存的概念.

mysql中的in函数,能放多少数据

  • 没有任何的数据限制,但是当in函数中有过多的数据时,非常影响效率,
  • 可以使用exist来替代in,能够提高sql的执行效率,
  • 仅仅受sql最长长度的限制

如何通过优化sql来提高数据库的查询效率

  • 应尽量避免在where语句中使用!=或> < 操作符,否则引擎将放弃索引而进行全表扫描
  • 应尽量避免在where语句中使用or来连接条件,否则引擎将放弃使用索引而进行全表扫描
  • 避免使用in,not in(同6)
  • 避免使用like
  • 不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引.
    例如select id from t from num/2=100;应改为: select id from t where num=100*2
  • 很多时候用 exists 代替 in 是一个好的选择
  • 不要使用select * from t,会很大程度降低sql语句的运行效率

sql中什么时候用内连接查询,什么时候用外连接查询

需要查找两张表同时存在的数据,使用内连接
需要查找两张表中一张表存在,另一张表不存在的时候使用左外连接或右外连接,例如老师和没有老师的学生
sql:
(1)外连接查询:左右外连接查询:左
select * from table1 t1 left join table2 t2 on where t1.id=t2._id;
(2)排序查询
升序排序
select * from table order by id asc
降序排序
select * from table order by id desc

事务提交的三种方式

什么是显式提交,什么是隐式提交?
显式提交也就是commit
隐式提交是:SQL命令间接完成的提交为隐式提交,隐式提交不能回滚
自动提交:AUTOCOMMIT设置为ON

sql中where和having的区别

  • where是对分组之前的数据进行过滤
  • having是对分组之后的数据进行过滤
  • where中不能使用:列别名和聚合函数,但是可以使用表别名
  • having中可以使用表别名和聚合函数
  • 有时候having可以替代where,但是where不一定能替代having

timestamp和datatime的区别

  • datatime的存储内容和显示内容是相同的
  • timestamp的存储内容和显示内容是不相同的,时间戳实际上存储的是从1970年1月1日到指定之日的毫秒值
  • 可以使用范围不同
  • 时间戳可以自动更新为当前时间,但是datatime不会

事务七大传播机制

  • required 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中.这是最常见的选择.
  • upports 支持使用当前事务,如果当前事务不存在,则不使用事务.
  • mandatory 中文翻译为强制,支持使用当前事务,如果当前事务不存在,则抛出Exception.
  • requires_new 创建一个新事务,如果当前事务存在,把当前事务挂起
  • not_supported无事务执行,如果当前事务存在,把当前事务挂起.
  • never 无事务执行,如果当前有事务则抛出Exception.
  • nested 嵌套事务,如果当前事务存在,那么在嵌套的事务中执行.如果当前事务不存在,则表现跟REQUIRED一样.

模糊查询

慎用全模糊查询(%...%),左模糊查询(%...),都会导致全表扫描,但是右模糊查询(...%)则不会全表查询.    like %aa%  --> aa%
应尽量避免在where字句中对字段进行表达式操作, select a from table where a/2 >10
						-->   select a from table where a>20;

数据库的三大范式?

  1. 第一范式:原子性 字段不可再分,否则就不是关系数据库;(列表字段不可分)
  2. 第二范式:唯一性 要求数据库表中的每个记录必须可以被惟一地区分
  3. 第三范式:每列都与主键有直接关系,而不是间接相关
  4. 三大范式的优点和缺点:
    优点:结构合理,可以避免插入删除修改数据错误
    缺点:性能降低,多表查询比单标查询速度慢

事务开始和结束的时间?

  1. 开始:开始执行DML数据操纵语言
  2. 结束:执行提交commit或回滚语句rollback;
    • 执行一条DDL语句;数据定义语言
    • 执行一条DCL语句;数据控制语言
    • 断开与数据库的连接

数据库中索引的优缺点:

定义:索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录.
  • 索引的优点:
    • 可以大大加快表查询的效率
    • 通过创建唯一性索引,可以保证数据库中每一行数据的唯一性
    • 可以加快表与表之间的连接
  • 索引的缺点:
    • 创建索引和维护索引是需要时间的.
    • 索引是占用物理内存的
    • 索引是需要随着表中数据的增删改来不断进行动态维护的.
    • 故当使用DML语言超过DQL语言的数量的时候,不再推荐使用索引来进行操作
  • 索引需要占用磁盘空间,且创建索引的时候需要对表进行加锁,且占用磁盘空间为普通表的1.5倍
  • 分类:
    • 主键索引
    • 外键索引
    • 普通索引
    • 全文索引
    • 组合索引

伪表

当查询的内容不和任何表中的数据有关系的时候,可以使用伪表,伪表能会查询出一条记录
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值