数据库基础
数据库基础分类专栏,带你走进数据库世界。涵盖数据库概念、SQL 基础等内容。从入门到精通,轻松掌握数据库知识与操作。助力开发者高效管理数据,为软件应用提供坚实的数据支撑。开启数据库学习之旅。
阳哥整理软件测试笔记
专注IT技术,软件测试小技巧领域,带你了解互联网不一样的世界。
展开
-
软件测试笔记|数据库基础|软件测试过程中,数据库测试有没有发现过什么问题?
如果软件没有对用户输入的 SQL 语句进行有效的过滤和验证,可能会被攻击者利用 SQL 注入漏洞获取或篡改数据库中的数据。随着业务的发展,数据量不断增加,如果数据库的存储容量没有进行合理规划,可能会出现数据存储失败的情况。例如,在经常用于查询条件的字段上没有创建索引,或者创建了过多的索引影响了数据插入和更新的性能。比如将字符串类型的值插入到整数类型的字段中,可能会导致数据库存储错误或在后续查询时出现异常。例如,在一个财务软件中,数据库中存储的交易金额总和与通过业务逻辑计算出的总和不一致。原创 2024-11-06 08:36:24 · 307 阅读 · 0 评论 -
软件测试笔记|数据库基础|如何进行多表查询?
右连接与左连接相反,以右表为基础,返回右表中的所有行以及左表中满足连接条件的行。如果左表中没有满足连接条件的行,则相应的列值为 NULL。左连接以左表为基础,返回左表中的所有行以及右表中满足连接条件的行。如果右表中没有满足连接条件的行,则相应的列值为 NULL。全连接返回两个表中的所有行。如果某一行在另一个表中没有匹配的行,则相应的列值为 NULL。在进行多表查询时,要确保连接条件正确,并且明确各个表之间的关系,以便得到准确的查询结果。这里根据两个表中的特定列进行连接,只返回两表中对应列值相等的行。原创 2024-11-06 08:34:03 · 414 阅读 · 0 评论 -
软件测试笔记|数据库基础|查询数据库的前100行数据,你SQL怎么写?
这两种写法在 MySQL 中都是可以的,都是查询table_name表中的前 100 行数据。原创 2024-11-06 08:31:49 · 313 阅读 · 0 评论 -
软件测试笔记|数据库基础|where与having的区别?
2. HAVING:在分组之后起作用,用于对分组后的结果集进行筛选,根据聚合函数的结果或分组后的列值来决定哪些分组可以被返回。• 例如,在按照部门分组后,要找出平均工资大于 8000 的部门,这时就需要使用HAVING子句对分组后的结果进行筛选。• 例如,在查询员工表中,要找出工资大于 5000 的员工记录,这时就可以使用WHERE子句在分组前进行筛选。• 比如,从订单表中筛选出订单日期在特定范围内的订单记录,或者筛选出某个客户的订单记录等。原创 2024-11-05 08:30:11 · 379 阅读 · 0 评论 -
软件测试笔记|数据库基础|having是干嘛的?
在 SQL 中,HAVING子句主要用于对分组后的数据进行筛选。原创 2024-11-05 08:28:40 · 282 阅读 · 0 评论 -
软件测试笔记|数据库基础|常见的关系型数据库有哪些?
• 特点:开源、免费、性能高、使用广泛。• 特点:功能强大、稳定可靠、安全性高。提供了丰富的管理工具和特性,适用于大型企业和关键业务系统。• 特点:由微软开发,与 Windows 系统集成度高。• 特点:由 IBM 开发,适用于大型企业和关键业务系统。• 特点:开源、功能强大、支持多种数据类型和高级特性。• 应用场景:金融、电信等行业的核心业务系统。• 应用场景:Web 应用开发、数据分析等。• 应用场景:Web 应用、地理信息系统等。• 应用场景:企业级应用、数据分析等。• 应用场景:金融、保险等行业。原创 2024-11-05 08:25:58 · 204 阅读 · 0 评论 -
软件测试笔记|数据库基础|存储过程是怎么写的?
存储过程是数据库中一组为了完成特定功能的 SQL 语句集。原创 2024-11-05 08:24:20 · 481 阅读 · 0 评论 -
软件测试笔记|数据库基础|在软件测试中,你们数据库怎么用的?
例如,检查插入的数据是否完整地存储在数据库中,更新操作是否正确地修改了相应的数据,删除操作是否成功删除了指定的数据。• 对于涉及大量数据操作的软件,可以通过数据库的性能监控工具来观察数据库在压力测试下的性能表现。• 根据测试用例的需求,在数据库中插入、更新或删除特定的数据,以模拟不同的业务场景。• 如果在测试过程中发现与数据库相关的问题,如数据不一致、数据库连接错误、性能瓶颈等,应详细记录在测试报告中。总之,在软件测试过程中,合理地使用数据库可以有效地验证软件的功能、性能和稳定性,确保软件的质量。原创 2024-11-04 08:40:33 · 442 阅读 · 0 评论 -
软件测试笔记|数据库基础|Mysql 开启General-log 日志?
在 MySQL 中开启 General log(通用日志)可以记录所有到达 MySQL 服务器的 SQL 语句。原创 2024-11-04 08:37:16 · 254 阅读 · 0 评论 -
软件测试笔记|数据库基础|存储过程和函数的区别?
• 存储过程:是一组为了完成特定功能的 SQL 语句集合。可以包含复杂的业务逻辑处理,如数据的插入、更新、删除、查询等操作的组合,以及条件判断、循环等控制结构。目的是封装可重复使用的业务逻辑,提高数据库操作的效率和可维护性。• 函数:是一段可以被重复调用的代码块,用于实现特定的计算或操作。在数据库中,函数通常用于对输入数据进行特定的计算并返回一个结果值,例如进行数学运算、字符串处理等。原创 2024-11-04 08:34:54 · 213 阅读 · 0 评论 -
软件测试笔记|数据库基础|如何优化数据库,提高数据库的性能?
3. 分库分表:当数据量过大时,可以考虑将数据分散到多个数据库或表中,以提高查询性能。2. 优化查询缓存:如果数据库支持查询缓存,可以根据实际情况调整缓存策略。• 规范化表设计,减少数据冗余,但也要避免过度规范化导致过多的连接操作。3. 控制返回结果集大小:只查询需要的字段和数据,减少不必要的数据传输。1. 调整缓存大小:如调整数据库的缓冲池大小,以提高数据的缓存命中率。• 避免使用复杂的子查询和连接操作,可以考虑分步骤查询或使用临时表。1. 避免全表扫描:尽量使用索引进行查询,减少不必要的全表扫描。原创 2024-11-01 08:39:03 · 240 阅读 · 0 评论 -
软件测试笔记|数据库基础|对MySQL的锁了解吗
了解。MySQL 中的锁主要用于控制多个事务对数据库资源的并发访问,以确保数据的一致性和完整性。原创 2024-11-01 08:35:20 · 400 阅读 · 0 评论 -
软件测试笔记|数据库基础|什么是死锁,怎么解决?
死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。例如,进程 P1 占用了资源 R1,同时请求资源 R2;进程 P2 占用了资源 R2,同时请求资源 R1。此时,两个进程都无法继续执行,陷入死锁状态。原创 2024-11-01 08:32:30 · 377 阅读 · 0 评论 -
软件测试笔记|数据库基础|MySQL中的in和exists有哪些区别?
• 对于EXISTS,MySQL 首先执行外层查询,对于外层查询的每一行,执行子查询。子查询通常可以利用外层查询的列值进行条件判断。• 如果外层表较小而子查询涉及的表较大且返回大量结果的可能性较低,EXISTS可能更高效,因为它可以快速判断子查询是否有结果,一旦找到第一个匹配就可以停止继续检查。• 当IN后跟子查询时,MySQL 通常会先执行子查询,得到一个结果集,然后将外层查询中的列值与这个结果集进行比较。• 如果子查询结果集较小而外层表较大,IN可能更高效,因为它可以先确定一个较小的结果集进行比较。原创 2024-10-31 08:43:39 · 362 阅读 · 0 评论 -
软件测试笔记|数据库基础|六种关联查询有哪些,有哪些区别
在数据库中,常见的关联查询主要有内连接(Inner Join)、左连接(Left Join)、右连接(Right Join)、全连接(Full Join)、交叉连接(Cross Join)和自连接(Self Join)。原创 2024-10-31 08:36:33 · 401 阅读 · 0 评论 -
软件测试笔记|数据库基础|SQL的约束有哪几种?
• 作用:保证表中某一列的值是唯一的,但可以为空值。与主键约束不同的是,唯一约束可以在多个列上定义,并且一个表中可以有多个唯一约束。• 作用:建立两个表之间的关联,确保外键列中的值必须在被引用表的主键列中存在,保证数据的一致性和完整性。• 作用:确保表中的某一列或多列组合的值具有唯一性,并且不为空值,用于唯一标识表中的每一行记录。• 作用:通过指定一个条件表达式,限制表中某一列或多列的值必须满足该条件。• 作用:确保表中的某一列不允许为空值,必须有具体的值。原创 2024-10-31 08:31:18 · 509 阅读 · 0 评论 -
软件测试笔记|数据库基础|SQL语句主要分为哪几类?
1. CREATE:用于创建数据库对象,如表、视图、索引等。例如:“CREATE TABLE students (id INT PRIMARY KEY, name VARCHAR(50), grade INT);”创建一个名为“students”的表。2. ALTER:用于修改数据库对象的结构。例如:“ALTER TABLE employees ADD COLUMN salary DECIMAL(10,2);”向“employees”表中添加一个名为“salary”的字段。原创 2024-10-30 08:31:54 · 414 阅读 · 0 评论 -
软件测试笔记|数据库基础|什么是触发器,触发器的使用场景有哪些?
触发器是一种特殊的存储过程,它在特定的表上被触发执行,用于实现数据库中的自动化操作。当对特定表进行特定的操作(如插入、更新、删除数据等)时,触发器会自动执行相应的代码逻辑。原创 2024-10-30 08:29:37 · 368 阅读 · 0 评论 -
软件测试笔记|数据库基础|什么是存储过程,有什么优缺点?
存储过程是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。原创 2024-10-29 08:32:52 · 230 阅读 · 0 评论 -
软件测试笔记|数据库基础|什么是游标?
游标是数据库系统中的一个重要概念。在数据库中,游标是一种用于处理从数据库中检索出的结果集的机制。它可以被看作是一个指向结果集中某一行的指针。原创 2024-10-29 08:30:44 · 209 阅读 · 0 评论 -
软件测试笔记|数据库基础|视图的优点和缺点?
• 视图可以将复杂的查询逻辑封装起来,对于用户来说,只需要查询视图而无需了解底层复杂的多表连接等操作。• 查询视图可能会比直接查询基础表更慢,特别是当视图的定义非常复杂或者涉及多个表的连接时。• 例如,对于一个涉及多个表连接和复杂条件筛选的查询,可创建一个视图,之后你只需要对这个视图进行简单的查询操作即可得到所需结果。• 当数据库的表结构发生变化时,如果视图的定义没有直接受到影响,那么使用该视图的应用程序无需修改。• 当有多个依赖于同一视图的应用程序时,视图的修改可能会影响到这些应用程序的正常运行。原创 2024-10-29 08:29:11 · 331 阅读 · 0 评论 -
软件测试笔记|数据库基础|视图的使用场景有哪些?
例如,在销售管理系统中,销售部门可能只关心销售订单的详细信息和客户名称,而财务部门可能需要查看销售订单的金额和付款状态。可以为不同部门创建不同的视图,满足各自的需求。例如,在一个企业管理系统中,经常需要查询员工的基本信息以及所属部门的详细信息,涉及员工表和部门表的连接。例如,当底层表的结构进行调整时,可以修改视图的定义来适应新的结构,而无需修改所有依赖该数据的应用程序。比如在一个医疗系统中,医生可以查看患者的病历信息,但某些敏感信息如患者的身份证号码可以通过创建视图来隐藏,只显示必要的医疗数据。原创 2024-10-28 08:32:18 · 479 阅读 · 0 评论 -
软件测试笔记|数据库基础|视图有什么特点?
可以将复杂的查询逻辑封装在视图中,对于用户来说,只需要查询视图就可以获得所需的数据,而无需了解底层复杂的表结构和连接关系。这样可以提高数据的安全性,防止未经授权的访问和数据泄露。1. 逻辑数据独立性:如果底层基本表的结构发生变化,但只要视图的定义不变,基于该视图的查询和应用程序就不需要修改。数据来源于定义视图的查询所涉及的基本表。当查询视图时,数据库系统会动态地执行定义视图的查询语句,并返回结果集。2. 一定程度的物理数据独立性:由于视图不存储实际数据,所以底层存储结构的变化对视图的影响相对较小。原创 2024-10-28 08:30:26 · 391 阅读 · 0 评论 -
软件测试笔记|数据库基础|数据库中为什么要使用视图,什么是视图?
视图是从一个或多个表中导出的虚拟表。它本身不包含实际的数据,而是基于 SQL 查询语句的结果集。可以将视图看作是一个存储的查询,当查询视图时,数据库系统会执行定义视图的查询语句并返回结果。原创 2024-10-28 08:28:51 · 276 阅读 · 0 评论 -
软件测试笔记|数据库基础|从锁的类别上分MySQL都有哪些锁呢?
比如,事务在对表中的某些行使用行级锁之前,InnoDB会自动在表级别添加意向锁,这样可以让数据库引擎更快地判断表中的数据是否被锁定。例如,事务A对数据对象加上共享锁后进行读取,此时事务B也可以对该数据对象加共享锁读取,但是不能加排它锁进行写操作。例如,事务A对数据对象加上排他锁后,事务B无论是读取还是写入这个数据对象都需要等待事务A释放锁。比如,在一个包含很多用户记录的表中,当更新某一个用户的信息时,行级锁可以只锁定这一个用户所在的行,其他行不受影响,这样可以提高并发性能。可以在查询数据的时候加上共享锁。原创 2024-10-25 08:35:39 · 397 阅读 · 0 评论 -
软件测试笔记|数据库基础|Mysql数据库如何实现分页?
这种方法相对复杂,但在一些特定场景下更灵活。其中your_table是要查询的表名,offset是偏移量,表示从第几行开始查询,count是要返回的行数。• 示例:如果想每页显示10条记录,查询第2页的数据,第一页的偏移量是0,第二页偏移量就是(2 - 1) * 10 = 10,查询语句为SELECT * FROM your_table LIMIT 10, 10;• 基本原理:先通过子查询生成一个包含行号的临时结果集,然后在外部查询中根据行号筛选出指定页的数据。原创 2024-10-25 08:32:46 · 262 阅读 · 0 评论 -
软件测试笔记|数据库基础|MySQL 与 MongoDB 本质之间最基本的差别是什么?
• MongoDB:使用类似JSON的文档来存储数据,文档是一组键 - 值对,一个集合(类似于关系数据库中的表)中的文档可以有不同的结构。• MySQL:数据存储在表中,以行和列的形式呈现。如在电商数据库中,订单表中的用户ID作为外键关联到用户表的主键,这种方式能很好地维护数据之间的关系,保证数据的完整性。• MongoDB:通常不使用外键,数据的关联可以通过在文档中嵌入其他文档或者文档引用的方式实现,但相对关系型数据库来说,这种关联方式没有那么严格和复杂。原创 2024-10-24 08:40:40 · 416 阅读 · 0 评论 -
软件测试基础|数据库基础|NoSQL 和关系数据库的区别?
NoSQL(非关系型数据库)和关系数据库主要有以下区别。原创 2024-10-24 08:39:03 · 301 阅读 · 0 评论 -
软件测试基础|数据库基础|Sql 注入是如何产生的,如何防止?
当网页应用程序在构建SQL语句时,直接将用户输入(比如在搜索框、登录表单等输入的数据)嵌入到SQL语句中,且没有进行充分的验证和过滤,攻击者就可以通过巧妙构造输入来篡改SQL语句的原本意图。例如,在登录验证的SQL语句“SELECT * FROM users WHERE username = 'pass'”中,如果没有对pass进行处理,攻击者在用户名输入框输入“admin' -- ”,密码随意输入,就可能绕过密码验证登录。SQL注入产生的原因是用户输入的数据被当作SQL命令或查询的一部分执行。原创 2024-10-24 08:36:58 · 453 阅读 · 0 评论 -
软件测试笔记|数据库基础|数据库的优化
5.采用MySQL 内部自带的表分区技术,把数据分层不同的文件,能够提高磁盘的读取效率;3.使用缓存,把经常访问到的数据而且不需要经常变化的数据放在缓存中,能节约磁盘IO。把一些不经常读的数据放在一张表里,节约磁盘 1/O;采用主从复制把数据库的读操作和写入操作分离开来;12.采用更快的存储方式,例如NoSQL 存储经常访问的数据。2.设计表的时候严格根据数据库的设计范式来设计数据库;1.优化索引、SQL 语句、分析慢查询;11.不采用全文索引;原创 2024-10-24 08:34:27 · 210 阅读 · 0 评论 -
软件测试笔记|数据库基础|如何对查询命令进行优化?
• 避免复杂的表达式和函数:在查询条件(WHERE)和排序(ORDER BY)中,尽量少用复杂的函数和表达式。• 优化分页查询:在进行分页查询时,避免使用大的偏移量(OFFSET)。• 合理创建索引:分析查询的WHERE、JOIN等子句中频繁使用的列,为这些列创建索引。例如,如果经常按用户名字查询用户信息,就可以为用户名列创建索引。比如在查询有对应关系的两张表的数据时,用连接可以减少查询的嵌套。• 避免过多索引:索引虽然能加快查询,但过多的索引会增加数据插入、更新和删除的时间,因为每次操作都要更新索引。原创 2024-10-23 08:36:56 · 284 阅读 · 0 评论 -
软件测试笔记|数据库基础|你用的 Mysql是哪个引擎,各引擎之间有什么区別?
它支持事务,具有ACID特性,在数据完整性要求高的场景很有用,如银行系统的转账操作。它还支持行级锁,在多用户并发访问同一数据表时,能减少锁冲突,提高并发性能。另外,InnoDB采用聚簇索引,数据和索引存储在一起,按主键顺序存放,加快了基于主键的查询速度。MyISAM不支持事务,但它的存储结构简单,在一些读密集型的应用场景下效率较高。它的优势是表级锁机制使得查询操作简单快速,适合以查询为主,很少有写入操作的环境,如数据仓库中的历史数据查询。MySQL有多种存储引擎,常见的包括InnoDB和MyISAM。原创 2024-10-23 08:34:29 · 416 阅读 · 0 评论 -
软件测试笔记|数据库基础|数据库怎么优化查询效率?
• 合理创建索引,对经常用于查询条件(如WHERE子句)、连接条件(JOIN)的列添加索引,像查询员工信息表中按员工编号查询员工工资的情况,可对员工编号建立索引。• 优化子查询,能够用连接(JOIN)替代的复杂子查询尽量用连接来写,因为连接操作在很多情况下比子查询效率高。• 对表进行合理的范式化设计,减少数据冗余,但也不能过度范式化导致查询时需要大量关联操作。• 适当进行反范式化,对于频繁一起查询的表可以考虑合并部分字段,减少关联查询开销。• 只查询需要的数据列,避免使用SELECT *,减少数据传输量。原创 2024-10-23 08:32:01 · 288 阅读 · 0 评论 -
软件测试笔记|数据库基础|事务的特性?
• 原子性(Atomicity):事务是一个不可分割的工作单位,就像一个盒子,里面的操作要么全部执行成功,要么全部不执行。例如银行转账,从账户A转一笔钱到账户B,转出和转入操作必须都成功,不然整个转账事务就失败。例如存储重要文件的数据库,提交后数据会持久存储,之后能正常读取。比如在财务系统中,无论进行何种交易事务,资产总额在事务前后必须保持平衡状态。• 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务。比如多个用户同时访问一个数据库,每个用户的操作事务相互隔离,不会干扰。原创 2024-10-23 08:28:48 · 83 阅读 · 0 评论 -
软件测试笔记|数据库基础|SQL 的 select 语句完整的执行顺序?
5. SELECT子句:在前面步骤完成数据筛选和分组后,执行SELECT子句,用于选择要显示的列或者计算表达式的结果。1. FROM子句:首先执行FROM子句,它确定了要查询的数据来源,也就是从哪些表或者视图中获取数据。3. GROUP BY子句:如果有GROUP BY子句,接下来就会按照指定的列对数据进行分组。4. HAVING子句:用于对分组后的结果进行筛选,它是在GROUP BY分组之后起作用。它用于筛选满足条件的行。6. ORDER BY子句:最后执行ORDER BY子句,对结果进行排序。原创 2024-10-22 08:40:10 · 240 阅读 · 0 评论 -
软件测试笔记|数据库基础|表的连接查询方式有哪些,有什么区别?
例如,有一个“学生表”(包含学生ID、姓名等)和一个“成绩表”(包含学生ID、科目、成绩),通过学生ID进行内连接,只会返回两个表中学生ID匹配的学生记录和成绩记录。• 左连接返回左表中的所有行,以及右表中与左表满足连接条件的行。如果右表中没有匹配的行,则对应的列会显示为NULL。比如,还是上述的学生表和成绩表,左连接以学生表为左表,会返回所有学生的记录,以及有成绩的学生对应的成绩记录,没有成绩的学生,成绩部分显示为NULL。• 右连接和左连接相反,它返回右表中的所有行,以及左表中与右表满足连接条件的行。原创 2024-10-22 08:38:13 · 445 阅读 · 0 评论 -
软件测试笔记|数据库基础|什么是关系型数据库,主键,外键,索引分别是什么?
就像书的目录一样,在查询数据时,数据库先查找索引,快速定位数据位置,而不用从头到尾搜索整张表。例如在一个有大量用户信息的表中,为用户姓名建立索引,在查找某个用户时速度会更快。例如,一个学校的数据库会有学生表和课程表,通过学生选课信息将这两个表关联起来。它在一个表中引用另一个表的主键。还是以学校数据库为例,选课表中有学生学号这一列,这个学号列就是外键,它引用了学生表中的学号主键,这样就能知道选课信息对应的是哪个学生。比如学生表中的学号,每个学生的学号是独一无二的,通过学号就能精准找到某个学生的所有信息。原创 2024-10-22 08:36:00 · 314 阅读 · 0 评论 -
软件测试笔记|数据库基础|什么是数据库?
例如图书馆,里面的书籍相当于数据。图书馆有一套分类系统,如按学科、作者等分类,这就类似数据库的数据结构。数据库能高效地对数据进行增删改查操作,就像图书馆管理员方便地整理和查找书籍一样。常见的数据库有MySQL、Oracle等,用于各种软件系统来存储用户信息、商品信息等诸多数据。数据库是按一定的数据结构来组织、存储和管理数据的仓库。原创 2024-10-22 08:33:42 · 217 阅读 · 0 评论 -
软件测试笔记|数据库基础|什么是事务的隔离级别?MySQL的默认隔离级别是什么?
事务的隔离级别是为了解决多个事务并发执行时可能出现的问题(如脏读、幻读、不可重复读等)而设置的不同程度的隔离机制。1. 读未提交(Read uncommitted):一个事务可以读取另一个未提交事务的数据,会导致脏读、不可重复读和幻读问题。2. 读已提交(Read committed):一个事务只能读取另一个已提交事务的数据,可以避免脏读,但可能出现不可重复读和幻读问题。3. 可重复读(Repeatable read)原创 2024-10-21 08:40:34 · 294 阅读 · 0 评论 -
软件测试笔记|数据库基础|什么是脏读?幻读?不可重复读?
比如,事务 A 按照某个条件查询出了一些记录,此时事务 B 插入了一些满足事务 A 查询条件的新记录,然后事务 A 再次按照相同条件查询时,发现结果集多了一些记录,就像出现了“幻觉”一样。例如,事务 A 修改了一条数据但还未提交,此时事务 B 读取了这条被事务 A 修改的数据。如果事务 A 最终回滚了修改,那么事务 B 读取到的数据就是“脏”数据,因为它并不应该被看到。例如,事务 A 读取了一行数据,然后事务 B 修改了这行数据并提交,接着事务 A 再次读取这行数据时,发现数据与第一次读取的不一样。原创 2024-10-21 08:37:03 · 246 阅读 · 0 评论