第四章 数据库

简介: MySQL中char为定长字符串,空间固定但易浪费;varchar为变长字符串,节省空间但性能略低。事务是保证数据一致性的操作集合,具备ACID四大特性:原子性、一致性、隔离性、持久性。并发事务可能引发脏读、不可重复读、幻读等问题,通过不同隔离级别解决,默认为可重复读。

1、基本知识
1.1 MySQL数据库中的 char 与 varchar的区别是什么?
MVSQL中的 char 和 varchar 都是用于存储字符串的数据类型,但它们在存储方式和性能上有所不同。以下是它们的主要区别:
第一点呢,就是存储方式不同:
·char:定长字符串,长度是固定的,不管实际存储的字符串长度如何,都会占用固定长度的存储空间。如:char(10) 会始终占用10个字符的空间。
varchar:变长字符串,长度不固定。占用的空间与实际存储的字段长度有关。如:varchar(10) 表示最多可以存储10个字符,如果存储的字符串长度不足10,假设为5,只会占用5个字符空间。第二点呢,就是性能不同:
,对于char,由于其固定长度,操作会快些,但是会存储浪费磁盘空间的问题
,对于varchar,由于长度可变,操作时会相对慢一点,但是可以节省磁盘空间,尤其是存储的数据长度不固定时。
所以呢,我们在设计表结构的时候,需要根据具体的场景来选择具体的数据类型。 就比如啊,如果是手机号、身份证号这样的字段,由于长度固定,我们就直接选择char类型即可,并指定长度,如:char(11)、char(18)。再比如,像用户名、备注信息这类长度不固定的,我们直接选择varchar类型,长度根据页面原型和需求文档确定。
1.2 什么是事务以及事务的四大特性?
·必答内容:
事务是数据库中的基本概念,是指一组操作的集合,而这一组操作要么同时成功,要么同时失败,从而保证数据库中数据的正确性和完整性。
也就是我们常说的ACID,分别是:原子性、一致性、隔离性、持久性。那接下来,我那事务呢,具有四大特性,就分别来聊聊这四大特性。
1).原子性指的是事务中的这一组操作,是不可分割的最小操作单元了,操作要么全部成功,要么全部失败。
2).一致性是指在事务操作的前后,必须使数据处于一致的状态。
3).隔离性指的是数据库中提供了隔离机制,保证事务在不受外部并发操作的影响的独立环境中运行。
4).持久性就比较简单了,就是事务一旦提交或回滚了,它对数据库的改变就是永久的。
可能继续发问的问题:
1).你刚才提到了并发事务,那并发事务回引发哪些问题?
并发事务引发的问题,主要有这么几个:
脏读:就是一个事务,读取到了另一个事务还没有提交的数据
不可重复读:指的是在同一个事务中,先后读取同一条记录,但两次读取的数据不同。幻读:指的是一个事务按照条件查询数据时,没有对应的行,但是插入时,又发现这行数据已经存在了好像出现了幻觉。
2),如何解决这些问题呢?
那这些问题,在数据库系统中都已经解决了。在数据库中提供了不同的隔离级别来解决这些问题,分别有以下几种:
READ UNCOMMITED:读未提交。这种隔离级别下,会出现脏读、不可重复读、幻读问题,READ COMMITED:读已提交。这种隔离级别,解决了脏读问题,但是会出现不可重复读、幻读问题REPEATABLE READ:可重复读。这种隔离级别,解决了脏读、不可重复读问题,但是会出现幻读问题SERIALIZABLE:串行化。解决了上述所有的并发事务问题。而在MySQL数据库中,默认的隔离级别是 REPEATABLEREAD(可重复读)。3).那为什么没有用SERIALIZABLE(串行化) 这种隔离级别呢?其实,隔离级别,也不是越高越好,因为隔离级别高了,确实可以解决并发事务引发的问题,但是隔离级别越高性能也越低。

相关文章
|
移动开发 JavaScript Oracle
Oracle根据汉字取拼音首字母的function
Oracle根据汉字取拼音首字母的function
10072 0
|
9月前
|
SQL 监控 关系型数据库
4、SQL性能分析及优化
通过SkyWalking链路追踪可定位慢接口及慢SQL,或开启MySQL慢查询日志(如设置超1秒记录)来识别执行慢的SQL。结合explain分析执行计划,关注key、type、extra等关键指标,判断索引命中与性能瓶颈,避免全表扫描,优化SQL性能。(238字)
|
9月前
|
Java Spring 容器
Spring Boot配置的优先级?
SpringBoot项目支持多种配置方式,主要包括配置文件(application.properties、.yml、.yaml)和外部配置(如系统属性、命令行参数)。优先级由高到低为:命令行参数 > 系统属性 > .properties > .yml > .yaml。自动配置核心是@SpringBootApplication中的@EnableAutoConfiguration,通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类,并结合@Conditional条件注解按需注入Bean。
|
9月前
|
SQL 数据库 索引
3.1索引创建的原则 ?
创建索引需遵循六大原则:针对大数据量、高频查询表;在查询、排序、分组字段建索引;优先高区分度列,可建唯一索引;varchar字段建议用前缀索引;多用联合索引且高区分度字段前置;避免过多索引影响维护效率。
|
9月前
|
Java Spring 容器
Spring Bean的作用域如何设置,常见的取值有哪些?
Spring Bean作用域可通过@Scope注解设置,常见有singleton(默认,单例)、prototype(每次创建新实例)、request(每请求一个实例)、session(每会话一个实例)。singleton在容器启动时初始化,可加@Lazy延迟;prototype则每次使用时创建。多数场景使用默认单例模式。
|
9月前
|
存储 安全
HTTP协议中常见的状态码?
HTTP状态码分为1xx到5xx五类,常见如200(成功)、302(重定向)、401(未认证)、404(资源未找到)、500(服务器错误)等。转发是服务器内部跳转,客户端无感;重定向由浏览器发起新请求。Cookie通过Set-Cookie和Cookie头实现会话跟踪,但数据存于客户端,安全性较低。
|
9月前
|
Java 应用服务中间件 Linux
9、Tomcat优化
Tomcat优化需综合JVM、线程池、网络等多方面。本文以SpringBoot 3.2.3为例,重点解析线程池与网络配置:`max-connections`设最大连接数,`accept-count`控队列长度,`threads.max/min-spare`管线程池大小,默认NIO模式适用于Linux。结合JDK21虚拟线程可进一步提升性能,SpringBoot 3.2.x原生支持,低版本可通过替换线程池实现。
|
9月前
|
人工智能 自然语言处理 JavaScript
用Cursor自动生成完整函数教程
借助Cursor编辑器的AI功能,可高效生成高质量函数代码。本文以提取Markdown图片链接为例,演示如何通过自然语言描述需求、自动生成、迭代优化到编写测试的完整流程,提升开发效率,让程序员更专注架构设计而非重复编码。
|
存储 安全 Unix
NFS身份验证
【10月更文挑战第14天】
1834 61
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
1088 3