业务需求:
产品库存或者一些保证原子性的操作,乐观锁是一个比较经典的方式,那么我们要考量一个很关键的因素,那就是这个版本号的长度的问题
从而引申出以下问题:
既然是mysql,那么就有必要去官方文档提取一些对我们设计这个字段有用的信息
如下紫色字体
Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT
整数类型又称数值型:
一起来重温下面基础知识吧
类型 | 有符号型取值范围 | 无符号型取值范围 |
TINYINT | -128〜127 | 0 〜255 |
SMALLINT | -32768〜32767 | 0〜65535 |
MEDIUMINT | -8388608〜8388607 | 0〜16777215 |
INT (INTEGER) | -2147483648〜2147483647 | 0〜4294967295 |
BIGINT | -9223372036854775808〜9223372036854775807 | 0〜18446744073709551615 |
还有以下关系
类型 | 说明 | 存储大小 |
TINYINT | 很小的整数 | 1个字节 |
SMALLINT | 小的整数 | 2个宇节 |
MEDIUMINT | 中等大小的整数 | 3个字节 |
INT (INTEGHR) | 普通大小的整数 | 4个字节 |
BIGINT | 大整数 | 8个字节 |
由于我目前正在设计我自己的项目字段,所以我选择以下方式作为我的具体业务处理案例讲解
添加方式:这里的默认值设置为0即可哈
1、在navicat 中执行如下,即可加入无符号整型
ALTER TABLE `mall_space`.`product`
ADD COLUMN `VERSION` smallint UNSIGNED NULL;
2、navicat 中如下勾选对应选项也可以的
java 实体类中如下
好,执行代码看看效果怎么样
好的报错了啊喂
我查看下sql
sql是这么写的
注意了:因为我的版本号在java代码中进行+的操作,所以要注意java long的相加会自动转换的问题,需要将newVersion = oldVersion+1L这样处理
改改吧!粗心大意在所难免,外面隔壁那栋楼正在改装公寓,装修声音太大的缘故啊哈哈哈
好的继续 ~~~~~~~结果如下
如有不足请指正
如果喜欢请点赞
如有帮助请收藏
如有疑问请留言