1.数据库表结构操作
1.1 字段修改
-- 修改字段类型
ALTER TABLE `evo_visitor`.`card_sys_config` MODIFY COLUMN `STR_VALUE` text;
--添加字段
ALTER TABLE dev_channel ADD COLUMN VIEW_ANGLE DECIMAL(7, 2) COMMENT '视角,角度';
---修改字段非必填
ALTER TABLE `card_solution`.`card_visitor_black` MODIFY COLUMN V_NAME varchar(255) DEFAULT NULL COMMENT '访客姓名';
2.事务控制
@Transactional(rollbackFor = Exception.class)
2.1 @Transactional和@DS避免数据源冲突的解决方案
@Override
@Transactional(rollbackFor = Exception.class)
@DS(DataSourceType.SHARDING_DATASOURCE)
// @DSTransactional
public void makeAppointmentForH5(AppointmentInfoVO visitorInfoVO, VisitorInfo visitorInfo) throws BusinessException {
参考1:https://blog.youkuaiyun.com/HJW_233/article/details/127117456
参考2:https://blog.youkuaiyun.com/weixin_40378837/article/details/106554198
3.in中到底能放多少个数据?
size=1000、size=10000、size=100000都不会报错,直到测试size=1000000,也就是in中有100百万个数据,才会报错,报错信息如下:
com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large (6,888,944 > 4,194,304).
You can change this value on the server by setting the 'max_allowed_packet' variable.
从错误信息可以看出,报错原因并不是in的数据太多了(已经有一百万个了),而是sql语句太长了,超过了4,194,304个字节,也就是4M,在我的MySQL中max_allowed_packet
变量的值为
查询语句:SHOW VARIABLES LIKE 'max_allowed_packet';
但是根据MySQL官网中的描述,max_allowed_packet
默认值为67108864,也就是64M。
因此,从测试可以看出,MySQL的in中并没有数量上的限制,但是有sql语句整体大小的限制,不过还是建议in条件中不要超过200个数据,原因跟查询优化器计算成本有关
参考:in中到底能放多少个数据?200?1000?10000?_mysql in查询最多有多少个-优快云博客