Mysql考核总结
图书管理系统问题:
1.ER图的逻辑:多个管理员既可以管理多个读者,也可以管理多个图书;读者可以使用多个图书;因此之间都是多对多的关系
2.删除的逻辑:
我在完成自己的项目时使用的是物理删除,这种删除在我考核时出现了问题,即
这本书在被读者借阅后会在借阅记录中出现一条记录,当我想去删除书中数据时,因为外键牵制无法删除
解决方法1:使用删除更新行为中cascade关键字,同时删除更新子表中的记录
解决方法2:将物理删除改为逻辑删除,设置is_del字段记录是否删除,从而保留被删除图书或者读者在借阅记录中的信息
3.对于外键作用的理解:多表查询并非是主要作用,是建立表之间的关系,保证数据的完整性和统一性,防止不一致操作
多对多建立中间表的作用:形成映射关系,用两张表无法形成
4.模糊查询:
书籍名字的模糊查询和价格的模糊查询不应该是同一逻辑
书籍可以通过单个字模糊查询到多个书籍,但书籍应该在某个价格范围内查询
5.数据库小数位数和java中数据小数位数不同
原因:在数据库中存储的数据类型和 Java 中的数据类型可能存在一些差异,这可能导致在从数据库中检索数据时看到的数值精度不同。
解决方法1:通过算法判断小数位数,如果是一位就补上零,如果两位就不管
解决方法2:将价格数据类型double改为BigDecimal
6.多表查询实体类的设置:
实现多表查询时,在联查的表中也需要设置其他表中的数据类型,此时除去再重新定义一次变量及其数据类型,也可以封装整个实体类作为属性,或用链表实现
知识点问题:
1.value和values的区别:
这两个在是否能插入单行和多行数据上是一致的,都可以,只是插入性能不一样
应该在插入单行的时候使用VALUES,在插入多行的时候使用VALUE
2.字符串类型text:
TEXT 类型通常用于存储较大的文本数据,其大小可以达到数据库所支持的最大值。它比较适合存储大块文本,例如文章内容、日志、评论等,但在使用时需要考虑到性能和查询效率的问题。
3.DQL执行顺序:
FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY -> LIMIT
4.引擎:
在 MySQL 中,存储引擎(Storage Engine)是负责表的存储和检索的模块。MySQL 支持多种不同的存储引擎,每种引擎都有其特定的特性、优势和用途。以下是 MySQL 中常见的存储引擎及其分类:
MyISAM:
1.不支持事务。
2.支持表级锁定,而不是行级锁定。
3.适用于读密集的应用,如数据仓库等。
4.支持全文本搜索索引。
InnoDB:
1.支持事务(ACID 兼容)。
2.支持行级锁定,提供更好的并发性。
3.适用于写入密集的应用,如事务处理系统。
4.支持外键约束。
5.具有崩溃恢复和故障转移的能力。
MEMORY (HEAP):
1.数据存储在内存中,提供快速的读写访问。
2.表数据在服务器重启时丢失,适用于临时数据或缓存。
3.不支持TEXT和BLOB列。
4.表级锁定。
NDB Cluster Archive CSV Blackhole Federated
5.视图:
视图的使用我也不是特别了解,就我自己摸索而言有一下几点:
视图(View)是一种虚拟的表,其内容是基于一个或多个实际表的查询结果。视图并不实际存储数据,而是根据特定的查询定义,动态地生成结果。
数据隐藏和安全性:
视图可以用于隐藏表的特定列,使用户只能看到他们需要的信息,而不是整个表的内容。
视图也可以限制用户对表的访问,只允许他们执行特定的操作,从而提高数据库的安全性。
简化复杂查询:
视图可以将复杂的查询逻辑封装在一个单独的视图中,使用户通过选中需要显示的列等等操作构建复杂的 SQL 语句。
另外视图也提供常用的sql语句固定格式,用户可以拖中生成
6.MVCC:
概念:MVCC是一种数据库管理系统(DBMS)中用于实现并发控制的技术。它的目标是允许多个事务同时对数据库进行读写操作,而不会互相干扰,同时保持数据的一致性和事务的隔离性。
核心思想:为每个事务创建一个"版本"或"快照",使得每个事务在读取数据时看到的是一个一致性的快照,而不受其他事务并发修改的影响。这样可以在一定程度上解决并发事务可能引发的一些问题,例如脏读、不可重复读和幻读。
关键概念:
1.版本号:每个数据项都有一个与之关联的版本号或时间戳。当一个事务对数据进行修改时,将会创建一个新的版本,而不是直接在原始数据上进行修改。
2.Read Snapshot(读取快照):在执行读操作时,事务会看到一个在事务开始时的数据库状态,即一个快照。这个快照是在事务启动时确定的,因此它不受其他并发事务的影响。
3.Write Snapshot(写入快照):在执行写操作时,事务会创建一个新的版本,并且只有在事务提交时才会将这个版本应用到数据库中。其他事务在读取数据时不会看到未提交的修改。
4.事务的可见性:事务只能看到在其启动时间之前已经提交的其他事务所做的修改。这保证了每个事务看到的是一个一致性的数据库状态。
MVCC 提供了一种相对较为高效的并发控制机制,允许事务在不互相阻塞的情况下并发执行。许多现代的数据库系统,如 PostgreSQL 和 MySQL 的 InnoDB 存储引擎,都使用了 MVCC 来支持并发控制。
反思:
1.对于基础sql语句的写法,以及多表查询时的各个sql语句都记忆不清淅,因为在写项目时候直接对着笔记粘过来用
2.认为只掌握到基础就够了,学到基础就没再往下深学,但实际上自己学的不多也不快,总想着做项目又不会用,但是在学习阶段多学一点又有什么不好呢
3.擅自以为哪些重要哪些不重要,有些自己认为不重要的只是模模糊糊有个记忆,却连个大概都说不上来
4.此次考核让我又重新修正了自己的学习态度和学习内容,非常感谢两位学长的指导