写一个查询语句,返回一个客户列表,列表中客户的推荐人的编号都 不是 2。...对于示例数据,结果为: +------+ | name | +------+ | Will | | Jane | | Bill | | Zack | +------+ DROP TABLE IF EXISTS
不可重复读也叫虚读(nonrepeatable read):同一查询在同一事务中多次进行,在此期间,由于其他事务提交了对数据的修改或删除,每次返回不同的结果。...幻读(phantom read):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,虽然查询条件相同,每次返回的结果集却不同。...事务内执行的查询只能看到查询执行前(而非事务开始前)就已经提交的数据。Oracle 的查询永远不会读取脏数据(未提交的数据)。...Oracle 不会阻止一个事务修改另一事务中的查询正在访问的数据,因此在一个事务内的两个查询的执行间歇期间,数据有可能被其他事务修改。...只读模式 只读事务只能看到事务执行前就已经提交的数据,且事务中不能执行 INSERT , UPDATE ,及 DELETE 语句。
当你输入了用户名和密码后,连接器会在权限表中查询你拥有的权限,之后本次连接中你对表能否操作查询删除修改等,都依赖于此时读取到的权限。...查询缓存 在经过连接器之后,会执行第二步查询缓存,在MySql拿到查询后,会先到查询缓存查看是否执行过这条语句,之前执行的结果会以key-value对的形式存在,如果不在查询缓存中,会继续执行后面的极端...,如果命中缓存则直接返回结果。...分析器 分析器会先做“词法分析”,识别出sql里的字符串分别是什么,读出“select”关键字对出这是一条查询语句,把字符串T识别成“表T” “语法分析”,根据词法分析的结果,判断该条sql是否满足MySql...的语法 优化器 优化器的作用在于选择最优的逻辑执行sql,例如在一个语句进行多表关联的时候,决定各个表的连接顺序 执行器 在开始执行前,先判断你对表T是否有执行查询的权限,没有就返回没有权限的错误,有权限则继续执行
返回客户端执行结果。...前置检查中除了表存在性检查,还会包含表的一致性检查,即查询所有 CN 和 DN 保证它们在执行 DDL 前表结构是一致的。...通过元数据 DB 查询大于自己版本的所有已经完成的任务。 2. 获取这些任务对应的 snapshot 信息。 3. 删除任务中存在,但 snapshot 中不存在的 DDL 信息。 4....其中第3步执行删除的考虑是:如果删除一个计算节点本地对象的 DDL ,它也会在 snapshot 中被删除,但任务中仍然会记录,因此需要将这类 DDL 先删除。...总结 本文详细阐述了 DDL 框架在正确性保障方面的任务容错能力和任务管理能力,未来也会分享更多复杂点: ● 更全面的自动回滚场景:针对 ALTER TABLE 下的具体场景,通过进一步细分,来实现某些异常下的自动回滚的能力
在单元测试的组件中,主要分为测试用例,测试固件,测试套件,测试执行以及测试报告,看过我书的同学对这些应该很清晰。测试固件也是不难理解,也就是在测试用例执行前需要做的动作和测试执行后需要做的事情。...比如在UI的自动化测试中,我们更加关注的是对页面的操作,而不是关心打开浏览器和关闭浏览器,在数据库的操作中,更加关注的是对MySQL的基本操作,而不怎么关心连接数据库和数据库断开连接这部分。...fixture是在测试函数运行前后,由pytest执行的外壳函数。首先来看fixture的函数返回值,也就是返回数值。先看如下的案例代码: #!...可以看到login的函数返回了token的值,但是它的装饰器是@pytest.fixtuer,在测试函数中,传入login的,也就是函数的形式函数也可以是函数,然后在测试函数中进行断言验证,执行的结果会显示通过...接着来看另外一个场景,也就是数据的初始化和清理,我们还是依据还是的案例来实战,结合fixture来实战,假设要测试一个接口的查询,前提是我添加数据,这就是初始化干的事,查询完后,要删除数据,这就是清理,
(Phantom Read):一个事务的操作导致另一个事务前后两次查询的结果数据量不同。...例如 当事务A和事务B并发执行时,当事务B查询读取数据后,事务A新增或者删除了一条满足事务B查询条件的记录,此时事务B再去查询,发现查询到前一次不存在的记录,或者前一次查询的一些记录不见了(事务B读取了事务...此时事务A执行异常,将张三的余额回滚为事务执行前的状态,余额为100。...事务A完成转账50,并且commit,事务B再次查询余额,发现变成了50,在某些业务场景下是可以允许的,不一定非要杜绝 幻读举例:事务B查询年龄为20的人,发现有5个。...事务A插入或删除了年龄为20的记录,并且commit,事务B再次查询年龄为20的人,发现已经不是5个人了,幻读也是在某些业务场景下是可以允许的,不一定非要杜绝 四、事务相关命令 查看MySQL是否自动提交事务
*每组基础数据可以根据实际的业务需求在程序中创建对应的枚举类(value和name属性). 2.系统配置表(sys_config) 作用:用于存放系统的配置项,某些业务逻辑需要根据配置项的值来做出相应的处理...*记录的新增、删除都是通过手动进行操作. *在系统配置页面中查询配置项并修改配置项的值. *在某些业务逻辑中需根据模块ID和配置代码查询配置项,根据不同的配置值做出相应的处理. ...集合中返回给SecurityManager,在Controller中通过注解或XML配置的方式设置资源必须拥有指定的role或permission时才能访问....*删除记录时前端需要传递要删除的机构ID,后台将删除本机构及其所有子机构,只要所有的父ID中包含要删除的机构ID则也应被删除. 6.系统操作日志(sys_log) 作用:用于记录用户在系统中的操作行为....2.当Service层中的方法执行前将会进入切面中的环绕通知方法,可以通过ProceedingJoinPoint的getArgs()方法获取连接点的参数集,在此时可以根据记录ID查询数据库中变更前的记录实体
写一个查询语句,返回一个客户列表,列表中客户的推荐人的编号都 不是 2。...对于示例数据,结果为:+------+| name |+------+| Will || Jane || Bill || Zack |+------+DROP TABLE IF EXISTS `customer
三、基于左右值编码的Schema设计 在基于数据库的一般应用中,查询的需求总要大于删除和修改。...但当你用手指指着表中的数字从1数到18,你应该会发现点什么吧。对,你手指移动的顺序就是对这棵树进行前序遍历的顺序,如下图所示。...但当你用手指指着表中的数字从1数到18,你应该会发现点什么吧。对,你手指移动的顺序就是对这棵树进行前序遍历的顺序,如下图所示。...查询结果如下所示: 那么某个节点到底有多少的子孙节点呢?...Fruit所有子孙节点及对应层次,查询结果如下: 从上面的实现中,我们可以看出采用左右值编码的设计方案,在进行树的查询遍历时,只需要进行2次数据库查询,消除了递归,再加上查询条件都是数字的比较
说明:不管执行结果如何,执行前事件都会记录事务日志;执行事件类型包括3种:BEFOREEXECUTE,EXECUTEFAILURE和EXECUTESUCCESS;另外,这里的"同步"不是绝对的同步执行,...中; void remove(String id):Rdb实现就是从 transaction_log表中删除事务日志,Memory实现从 ConcurrentHashMap中删除事务日志; void increaseAsyncDeliveryTryTimes...size条;Rdb实现通过sql从transaction_log表中查询,Memory实现遍历ConcurrentHashMap匹配符合条件的TransactionLog; boolean processData...():Rdb实现执行TransactionLog中的sql,如果执行过程中抛出异常,那么调用increaseAsyncDeliveryTryTimes()增加送达重试次数并抛出异常,如果执行成功,删除事务日志...,并返回true;Memory实现直接返回false(因为processData()的目的是执行TransactionLog中的sql,而Memory类型无法触及数据库,所以返回false) 1.1.2
复制多行/单行:输入yy,然后按k 删除某一行:按dd; 删除某个字符:光标选中某个字符,按x 删错某个字符/某一行想返回:u 替换某个文件所有内容:%s/failymao/momo/g (ESC后...: sed 's/momo/failymao/g' test.txt(查看替换,s表示查找) sed -i 's/momo/failymao/g' test.txt替换(加参数 -i 表示写入) 匹配行前插入...后面的disabled为123456) find命令 查找当前目录某个文件: ?..."*.py" -typt d -mtime +1 -size +10M (d表示类型为目录,-mtime +1 表示一天以上,-1表示1天之内,-size表示大小为10M的文件目录) 查找文件包含有某些内容的文件...删除文件 == 等同于exec:find /root/ -name "*.py" | xargs rm -rf {} \; (管道符| xargs 等同于 -exec) 管道符grep 过滤文件:前面的结果作为后面的输入
spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中 @CachePut 将方法的返回值放到缓存中 @CacheEvict 将一条或多条数据从缓存中删除...注意,我们上面的演示,最终的数据是缓存在 ConcurrentHashMap ,当我们将项目重启后,缓存中的数据就会消失,我们后面使用了Redis来缓存就不存在这样的问题了。...那当然是删除方法和修改方法上,数据库的数据已经发生了变更,我们就需要将缓存中对应的数据删除掉,避免出现数据库数据与缓存数据不一致的情况。...3.4 @Cacheable注解 作用 在方法执行前,spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据; 若没有数据,调用方法并将方法返回值放到缓存中。...具体的代码实现如下: 测试结果就是 第一次查询时,需要查询数据库,在后续的查询中,就直接查询了缓存,不再查询数据库了。
就是因为 MySQL 这一步的操作) 权限验证时机 在查询缓存命中返回结果之前。 执行器执行之前。 查询缓存 查询语句优先查询缓存,如果缓存命中直接返回。否则继续按序执行。...查询时指定使用缓存 (MySQL 8.0 之后删除了这个功能。)...mysql> select SQL_CACHE * from T where ID=10; 分析器 获取语义,分析输入的语句是什么目的,是查询还是删除还是修改等等。 语法分析,检查语法输入是否正确。...优化器 对SQL执行语句进行优化,是否使用索引,多结果集如何关联查询等。 执行器 执行优化器优化后的 SQL 语句,在执行前进行权限验证,使用的信息为连接器提供的权限信息。...一条查询语句是如何执行的 mysql> select * from T where ID=10; 建立连接 查询缓存 语义语法分析 语句优化 执行执行,调用存储引擎接口查询数据 返回结果
,使用生成的key来存储到Map中 将目标方法返回的结果放进缓存中 也就是说@Cacheable标注的方法执行之前都会先去缓存中查询有没有这个数据,默认按照目标方法传递的参数查询,如果没有就运行方法并将结果缓存...= "#id==1166057546") 这里指定的unless是当查询1166057546既条件为true时,返回结果不会被缓存 重启应用,在浏览器执行查询操作,此时查询1166057546时,结果没有被缓存...此时发现查询到的结果还是之前的结果,并不是更新后的结果,这是因为更新没有返回数据,方法中都是void,所以缓存中的数据没有变化 依次修改TeslaService接口、TeslaServiceImpl...,默认是清除指定cacheNames的缓存 beforeInvocation属性 该属性是指在方法执行前删除缓存还是方法执行后删除缓存,为布尔值类型,默认为false既在方法执行后删除缓存 @CacheEvict...SQL语句,说明在方法执行前就已经将缓存删除,方法中的异常不会对清除缓存造成影响 @Caching 该注解用来指定多个复杂规则 分别在TeslaController、TeslaService、TeslaServiceImpl
通过Mybatis拦截器我们可以拦截某些方法的调用,我们可以选择在这些被拦截的方法执行前后加上某些逻辑,也可以在执行这些被拦截的方法时执行自己的逻辑而不再执行被拦截的方法。...并返回 BoundSql 表示动态生成的SQL语句以及相应的参数信息 Configuration MyBatis所有的配置信息都维持在Configuration对象之中 Mybatis拦截器并不是每个对象里面的方法都可以被拦截的...ResultSetHandler ResultSetHandler用于对查询到的结果做处理。...所以如果你有需求需要对返回结果做特殊处理的情况下可以去拦截ResultSetHandler的处理。...3.4 对查询结果的某个字段加密 自定义拦截器EncryptResultFieldInterceptor对查询回来的结果中的某个字段进行加密处理。
用过Fabric的都知道,在Fabric中的状态数据库提供了Couchdb和Leveldb两种实现,一般我们都会使用Couchdb作为状态数据库的默认实现,主要是因为Couchdb可以进行富查询。...但是在某些情况下我们只能采用Leveldb的情况下,我们无法使用富查询,那么怎么办?...我们可以利用Leveldb适合前缀查询的特点进行前缀查询,而且由于Leveldb底层结构的特点,进行前缀查询的效率是特别高的。...要进行前缀查询,那么我们在PutState的时候要合理设计前缀值,从而能够利用前缀查询。以一个会议签到存证系统为例,我们在Fabric的链码中设计了两个对象Meeting和CheckinLog。...这么我们知道会议ID的情况下,查询签到记录返回的是一个集合,那么我们可以基于stub.GetStateByRange接口来进行查询,该操作的核心就是要构造其两个参数startKey和endKey。
当然以上两条是事务理论上应该持有的特性,但是实际应用过程中,由于业务需求的不同或配置方式不同,事务对以上两个方面的满足程度也不尽相同。...即当事务执行过程中,发生了某些异常情况,如系统崩溃、执行出错,则需要对已执行的操作进行回滚,清除所有执行痕迹。 一致性(Consistency):事务执行前和事务执行后,数据库的完整性约束不被破坏。...事务所能体现出的作用就是通过其所具有的属性定义的,隔离性保证了数据库的并发访问中,多个事务之间彼此隔离,避免相互影响;原子性则保证了即使事务执行失败,仍然能够将数据库恢复到执行前状态;一致性则是在数据库操作执行异常时...但是因为只对现有的记录上进行了锁定,并未维持间隙锁/范围锁,导致某些数据记录的插入未受阻拦,即存在幻读现象。 幻读指的是,事务中前后相同的查询语句,返回的结果集不同。...例如在事务 查询表记录后,事务 向表中增加了一条记录,当事务 再次执行相同的查询时,返回的结果集可能不同,即存在幻读现象。
事务性质:ACID特性 原子性(Atomicity):事务的所有操作在数据库中要么全部正确的反映出来,要么完全不反映; 一致性(Consistency):执行前后数据保持一致,比如,转帐系统执行前后,...第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 索引是建立在数据库表中的某些列的上面。...这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比 例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。 ...3、非重复读(nonrepeatableread):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。...4、幻像(phantom read):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。
领取专属 10元无门槛券
手把手带您无忧上云