开发问题汇总

博客总结了在codebase基线升级项目中遇到的各种问题,包括代码重复开单、更新语句未加WHERE条件导致误操作、字段不存在错误、事务相关问题如回滚和隔离级别、数据字段长度超出限制、JSON解析异常以及版本迭代中增加表字段的策略。此外,还详细讨论了事务的ACID特性、MySQL的事务隔离级别以及JDBC事务管理。
摘要由CSDN通过智能技术生成
codebase基线升级项目问题
codebase重复开单

方法中有报错依然执行了创建单据方法, 涉及事务回滚,在方法上添加此注解

@Transactional(rollbackFor = {Exception.class, Error.class})
update未加where条件 误操作
  1. 修改基线状态字段 未加where条件,将所有单据的基线状态字段都改为同一值 binlog指令回退到指定 时间点的数据。
  2. 做update delete insert 操作时开启事务
    //开启事务
    start transaction;
    //执行sql命令
    update table set column = value where column = value;
    //检查操作是否正常
    select * from table where column = value;
    // commit;有误操作执行rollback回滚,执行正常commit提交事务
    rollback;//commit
    
出现Unknown column ‘XXX’ in ‘field list’ 问题
  1. 如果是mybatis框架 考虑是否参数映射问题 没有添加注解@Param
  2. 字段名写错
  3. 数据库表无此字段
codebase事务相关问题

因为今天同事问我@Transactional(rollbackFor = {Exception.class, Error.class})注解相关的问题,我跟他说将@Transactional(rollbackFor = {Exception.class, Error.class})注解加在类上 该类的所有方法报异常都会发生回滚,他在进行debug调试带有插入和查询的方法时,又在运行完插入的dao时在Navicat中进行对该条数据查询,发现并不能查询到插入的数据。于是想到事务相关的操作

data too long for column

插入数据时,报错。插入的字段数据过长 超出设定范围,修改表字段长度。
after表示跟在哪个字段后面

ALTER TABLE `user`
MODIFY COLUMN `sex`  int(2) NULL DEFAULT NULL AFTER `name`;
UnrecognizedPropertyException

jackson 调用接口的json数据有问题

版本迭代需要增加表字段

2.0版本新增了master合入feature人工测试类型,开发环境用的数据库可以直接更改字段,生产环境数据库表需要一致 又必须保留原数据,使用alter语句增加字段。

如何做到所有对外接口都以/api为前缀

事务

事务是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元)

事务的四大特性(ACID)

表示一个事务内的所有操作是一个整体,要么全部成功,要么全部失败

表示一个事务内有一个操作失败时,所有的更改过的数据都必须回滚到修改前状态

事务查看数据操作时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。

持久性事务完成之后,它对于系统的影响是永久性的。

mysql事务隔离级别

在这里插入图片描述

  • 读未提交

ISOLATION_READ_UNCOMMITTED:这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。
这种隔离级别会产生脏读,不可重复读和幻像读

  • 不可重复读(读已提交)

ISOLATION_READ_COMMITTED:保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据

  • 可重复读

ISOLATION_REPEATABLE_READ:这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。
它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。

  • 串行化

ISOLATION_SERIALIZABLE:这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。 除了防止脏读,不可重复读外,还避免了幻像读

事务的传播属性
jdbc事务

jdbc的事务管理基于connection接口实现,jdbc事务默认开启默认提交,通过3个方法管理事务,con.setAutoCommit(false)设置不自动提交事务 con.commit 提交事务 con.rollback()回滚事务。setTransactionIsolation设置隔离级别。

Spring事务:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值