Java学习——Mysql总结

本文深入探讨了数据库的三大范式,解释了它们对于数据完整性和存储效率的重要性。同时,对比了MyISAM与InnoDB存储引擎,指出InnoDB在事务处理和并发性能上的优势。此外,详细介绍了索引的种类和作用,以及可能导致索引失效的情况。最后,提到了SQL查询中的关联查询和子查询应用,帮助优化查询效率。
摘要由CSDN通过智能技术生成

1、数据库三大范式

  • 第一范式:每个列都不可以再拆分
  • 第二范式:在第一范式的基础上,非主键完全依赖于主键,而不能是依赖于主键的一部分
  • 第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其它非主键

2、Mysql存储引擎MyISAM与InnoDb区别

  • Innodb引擎:Innodb引擎提供了对数据库ACID事务的支持。并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数据库系统。
  • MyIASM引擎(原本Mysql的默认引擎):不提供事务的支持,也不支持行级锁和外键。
  • MEMORY引擎:所有的数据都在内存中,数据的处理速度快,但是安全性不高。

  • MyISAM:以读写插入为主的应用程序,比如博客系统、新闻门户网站。
  • Innodb:更新(删除)操作频率也高,或者要保证数据的完整性;并发量高,支持事务和外键。比如OA自动化办公系统。

3、索引:是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。

  • 优点:可以大大加快数据的检索速度,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
  • 缺点:创建索引和维护索引要耗费时间,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,会降低增/改/删的执行效率;
  • 索引需要占物理空间
  • 主键索引:数据列不允许重复,不允许为NULL,一个表只能有一个主键
  • 唯一索引:数据列不允许重复,允许为NULL值,一个表允许多个列创建唯一索引。
  • 可以通过alter table table_name add unique(column);创建唯一索引
  • 可以通过alter table table_name add unique(column1,column2);床架唯一组合索引
  • 普通索引:基本的索引类型,没有唯一性的限制,允许为null值
  • 可以通过ALTER TABLE table_name ADD INDEX index_name (column);创建普通索引
  • 可以通过ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3);创建组合索引
  • 全文索引:是目前搜索引擎使用的一种关键技术
  • 可以通过ALTER TABLE table_name ADD FULLTEXT (column);创建全文索引

4、InnoDB存储引擎索引实现为:B+树索引

5、索引失效的情况

  1. 前导模糊查询不能利用索引(like '%xx' 或者 '%xx%')
  2. 如果是组合索引的话,如果不按照索引的顺序进行查找,比如直接使用第三个位置上的索引而忽略第一二个位置上的索引时,则会进行全表查询。索引为c1,c2,c3,c4直接使用c3是全表查询,无法使用该索引的,所以c3字段使用索引的前提是c1,c2两字段均使用了索引。
  3. 条件中有or
  4. 索引无法存储null值,所以where的判断条件如果对字段进行了null值判断,将导致数据库放弃索引而进行全表查询。
  5. 索引无法存储null值得原因:索引时有序的,null 进入索引时,无法确定其应该在哪里,
  6. 应尽量避免在where子句中适应!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
  7. in和not in也要慎用,否则会导致全表扫描。
  8. 应避免在where字子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。substring(name,1,3)='abc'
  9. 应避免在where子句中对字段进行表达式操作。

6、Sql约束有哪几种?

  • NOT NULL: 用于控制字段的内容一定不能为空(NULL)。
  • UNIQUE: 控件字段内容不能重复,一个表允许有多个 Unique 约束。
  • PRIMARY KEY: 也是用于控件字段内容不能重复,但它在一个表只允许出现一个。
  • FOREIGN KEY: 用于预防破坏表之间连接的动作,也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
  • CHECK: 用于控制字段的值范围。

7、关联查询

  • 交叉连接(CROSS JOIN)
  • 内连接(INNER JOIN)
  • 外连接(LEFT JOIN/RIGHT JOIN)左外连接:LEFT OUTER JOIN, 以左表为主,先查询出左表,按照ON后的关联条件匹配右表,没有匹配到的用NULL填充,可以简写成LEFT JOIN
    右外连接:RIGHT OUTER JOIN, 以右表为主,先查询出右表,按照ON后的关联条件匹配左表,没有匹配到的用NULL填充,可以简写成RIGHT JOIN
  • 联合查询(UNION与UNION ALL)
  • 全连接(FULL JOIN)
  • 交叉连接(CROSS JOIN)

8、子查询

  1. 条件:一条SQL语句的查询结果做为另一条查询语句的条件或查询结果

  2. 嵌套:多条SQL语句嵌套使用,内部的SQL查询语句称为子查询。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值