codebase基线升级项目问题
codebase重复开单
方法中有报错依然执行了创建单据方法, 涉及事务回滚,在方法上添加此注解
@Transactional(rollbackFor = {Exception.class, Error.class})
update未加where条件 误操作
- 修改基线状态字段 未加where条件,将所有单据的基线状态字段都改为同一值 binlog指令回退到指定 时间点的数据。
- 做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’ 问题
- 如果是mybatis框架 考虑是否参数映射问题 没有添加注解@Param
- 字段名写错
- 数据库表无此字段
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事务: