数据分析师

手机号

验证码

30天自动登录

数据分析师

为IT提供更简便的方法来保护数据

来源:CPDA数据分析师网 / 时间:2021-04-23

在我们可以在自己的存储过程中使用事务之前
可能有助于了解什么是事务,简而言之事务是执行的一组操作,因此保证所有操作作为一个单元成功或失败,考虑将钱从支票帐户转移到储蓄帐户的过程。该动作实际上由两部分组成,从支票帐户中提取资金,将其存入储蓄帐户,现在想象一下如果步之后停电了会发生什么,我认为我们可以同意,如果从支票帐户中扣除资金但未将其添加到储蓄帐户中,那将是一个问题!就像您不希望在财务交易中发生这种情况一样,更新一个数据库表而不更新引用该表的表也是不希望的,通过使用事务,可以保证两个操作一起成功或失败,这样所有涉及的实体将保持一致状态。

酸和交易
事务在实施所有四个属性(原子性,一致性,隔离性和持久性)中起着关键作用,让我们看看他们是如何做到的。

原子性
如果无法将数据库操作进一步分解为单独的操作,则该数据库操作被视为原子操作,事务也是原子的,因为事务中发生的所有操作要么一起成功,要么一起失败,如果在交易过程中任何单个操作失败,则一切都被视为失败,并且必须撤消。

一致性
使用事务的主要好处之一是,无论事务是否成功完成,它都应使数据库处于一致的状态,这确保了事务修改的数据符合列上的所有约束,从而保持了数据完整性。

隔离
每笔交易都与其他交易隔离,因此一个事务不应影响同时运行的其他事务,一个事务进行的数据修改应与其他事务进行的数据修改隔离,因此虽然一个事务可以看到处于其他并发事务对其进行修改之前以及第二个事务完成之后所处状态的数据,但它看不到任何中间状态。

耐用性
事务可以通过几种方式帮助提高持久性:成功事务中发生的数据修改可以安全地视为已存储在数据库中,而不管可能发生的任何其他事情,完成每个事务后,将在数据库事务日志中输入一行,因此如果系统故障要求从备份中还原数据库,则可以使用此事务日志将数据库恢复到成功事务后的状态。

在数据库级别防止SQL注入
许多组织通过在其应用程序中实施输入验证来努力保护其数据。如此有价值的是,应该指出的是,许多网络攻击直接针对数据库服务器本身,而应用程序安全性根本没有发挥作用!作为数据库管理员(DBA)或数据库开发人员,您具有巨大的能力来降低网络攻击的风险和/或可能导致的损害,包括常见的网络攻击形式:SQL注入。在今天的博客中,我们将探索一些可以大大减少遭受SQL注入攻击的可能性的做法。

关系数据库中的原子性
不久前,“原子”一词指的是无法进一步分裂的事物,尽管已经发现原子本身由更小的粒子组成,但该术语继续保留其原始含义,对于关系数据库,原子性意味着数据库执行的操作(DML / DDL等)将是原子的。关系数据库通常提供的原子性单位是事务,为什么这很重要?原子性的保证可以防止仅部分更新数据库,这比直接拒绝整个操作系列会引起更大的问题。在今天的博客中,我们将学习原子性是什么以及如何在数据库实例中实施原子性。

没有原子性就不能拼写酸
您可能已经听说过有关关系数据库的术语“ ACID”。它代表“原子一致性隔离耐久性”。它是数据库管理系统(DBMS)中的一个概念,它标识了一组用于保证数据库可靠性的标准属性。ACID属性可确保所有数据库事务保持准确且一致,并支持从处理操作期间可能发生的故障中恢复。这样,几乎所有关系数据库都实现了它。

这是原子性出现的地方:
假设您正在执行数据库UPDATE,将需要10秒钟来处理表中的所有行。随着更新的进行,电源突然熄灭!恢复电源后,您便可以读取数据,并发现其中一些行已根据您的SQL语句进行了更新,而其余的行则没有。您现在变得有些混乱,幸运的是今天的现代数据库不可能发生这种情况,对吧?错误的。

了解您的存储引擎
在许多情况下,您使用的数据库类型并不像所使用的存储引擎那么重要。存储引擎是DBMS用于创建,读取,更新和删除(CRUD)数据的基础软件组件,大多数数据库支持几种不同类型的存储引擎,例如MySQL当前提供以下功能:

创新数据库
我的ISAM
记忆
CSV
档案
黑洞
开发银行
合并
联合的
例子
您不限于对整个服务器或架构使用相同的存储引擎。您可以在表级别指定存储引擎。

存在各种各样的存储引擎

因为某些存储引擎在某些操作和环境中有效,而在其他操作和环境中则非常无效。考虑并选择哪种存储引擎适合您的使用模式时,这一点很重要,回到我们的示例,如果您使用的是MyISAM引擎,则可能会遇到麻烦,因为MyISAM不会强制执行原子性,因此可以部分应用单个更改,从而影响预期集中的某些行,而其余不受影响,存储引擎可以确保将所有UPDATE应用于您想要的完整行集,否则,如果发生错误或由于某种原因导致事务中断,则它将不应用于任何行。


返回列表