精华内容
下载资源
问答
  • Mybatis-Plus更新表字段为null

    问题

    业务上需要将一张表的一个字段从有值置为null,使用mybatis-plus(版本号为3.3.0)的updateById() 方法成功但数据库数据未修改,控制台打印的sql也没有对字段belong_type更新

    	/**
         * 使用 boolean updateById(T entity);
         * @param typeId
         * @return
         */
        public boolean removeType(Integer typeId) {
            ChannelType channelType = getById(typeId);
            channelType.setBelongType(null);
            return updateById(channelType);
        }
    
    UPDATE channel_type SET type_name=?, type_code=?, is_received=?, is_system_type=?, data_source=?, create_time=? WHERE id=? AND delete_flag=0 
    Parameters: 2(String), 2(String), 1(Integer), 0(Integer), 2(String), 2021-03-23 00:00:00.0(Timestamp), 25(Integer)
    

    分析

    mybatis-plus在更新操作的时候,对null值的设置默认不采用。
    具体原因:mybatis-plus中有一个枚举类FieldStrategy 如下

    package com.baomidou.mybatisplus.annotation;
    
    public enum FieldStrategy {
        IGNORED,
        NOT_NULL,
        NOT_EMPTY,
        DEFAULT,
        NEVER;
    
        private FieldStrategy() {
        }
    }
    

    mybatis-plus默认更新策略是NOT_NULL,这个默认策略导致了更新null值失效。

    解决方案

    1. 修改配置

    并不推荐修改配置,可能会对其他业务造成影响,所以推荐针对当前业务逻辑进行更新

    2. 使用UpdateWrapper方式更新

    方法修改:

        /**
         * 使用 UpdateWrapper
         * @param typeId
         * @return
         */
        public boolean removeType(Integer typeId) {
            UpdateWrapper uw = new UpdateWrapper();
            uw.set(DBConstants.BELONG_TYPE, null);
            uw.eq(DBConstants.ID, typeId);
            return update(uw);
        }
    

    执行sql:

    Preparing: UPDATE channel_type SET belong_type=? WHERE delete_flag=0 AND (id = ?) 
    ==> Parameters: null, 25(Integer)
    

    IService层方法:

    public interface IService<T>{
    	...
    	boolean update(T entity, Wrapper<T> updateWrapper);
    
        default boolean update(Wrapper<T> updateWrapper) {
            return update(null, updateWrapper);
        }
    }    
    
    展开全文
  • 循环更新表字段

    2016-10-20 11:58:13
    这是使用游标更新表字段,循环更新的表需要有一个字段是有规律的自增长列,如本例中的字段:standard_parts_no,它的值为MBB2001,MBB2002,MBB2003... 本例中还有一个知识点,怎么插入自定义有规律的列,如本例中的...

    这是使用游标更新表字段,循环更新的表需要有一个字段是有规律的自增长列,如本例中的字段:standard_parts_no,它的值为MBB2001,MBB2002,MBB2003...

    本例中还有一个知识点,怎么插入自定义有规律的列,如本例中的字段:standard_parts_no,

    'MBB2'+right('000'+rtrim(@i),3)

    DECLARE @erpNo varchar(50)
    declare @i int
    set @i=1
    DECLARE My_Cursor CURSOR --定义游标
    FOR (select [零件编号] from sheet2$ where [序号] between 4473 and 4528) --查出需要的集合放到游标中
    OPEN My_Cursor; --打开游标
    FETCH NEXT FROM My_Cursor INTO @erpNo; --读取第一行数据(将sheet2$表中的[零件编号]放到@erpNo变量中)
    WHILE @@FETCH_STATUS = 0
        BEGIN
            PRINT @erpNo+convert(varchar,@i); --打印数据(打印sheet2$表中的[零件编号])
            UPDATE table1 SET erp_no = @erpNo WHERE standard_parts_no='MBB2'+right('000'+rtrim(@i),3); --更新数据
            FETCH NEXT FROM My_Cursor INTO @erpNo; --读取下一行数据(将sheet2$表中的[零件编号]放到@erpNo变量中)
    		set @i=@i+1
        END
    CLOSE My_Cursor; --关闭游标
    DEALLOCATE My_Cursor; --释放游标
    GO
    


    展开全文
  • 最近需要批量更新表字段属性(如TBZYBRLCXXBQ201、TBZYBRLCXXBQ202、TBZYBRLCXXBQ203……)由于表太多,所以需要使用升级脚本来批量更新表字段属性(批量增加表字段同理) 1 USE YXHIS //选择使用的数据库 ...
    最近需要批量更新表字段属性(如TBZYBRLCXXBQ201、TBZYBRLCXXBQ202、TBZYBRLCXXBQ203……)
    由于表太多,所以需要使用升级脚本来批量更新表字段属性(批量增加表字段同理)
     
     1 USE YXHIS  //选择使用的数据库
     2 GO
     3 DECLARE CurTable CURSOR  //声明游标
     4 FOR 
     5 SELECT name FROM sysobjects where name like 'TBZYBRLCXXBQ%'  
     6 AND TYPE='U'
     7 OPEN CurTable
     8 DECLARE @TBNAME VARCHAR(20)
     9 FETCH NEXT FROM CurTable INTO @TBNAME
    10 WHILE (@@FETCH_STATUS <> -1)
    11 BEGIN
    12    if exists (select * from sysobjects where name=@TBNAME)
    13    begin
    14      if  exists(select * from syscolumns where name='CHLYS' and id=object_id(@tbname))  //判断是否存在需要更改的列
    15      begin
    16        EXEC('alter table '+@TBNAME+' alter column CHLYS varchar(30)')
    17      end
    18    end
    19    FETCH NEXT FROM CurTable INTO @TBNAME
    20 END
    21 CLOSE CurTable
    22 DEALLOCATE CurTable
    23 GO

     

    转载于:https://www.cnblogs.com/yueyingdiaoling/p/7389816.html

    展开全文
  • Flask-migrate更新表字段时不起作用

    千次阅读 2019-07-30 19:24:40
    Flask-migrate更新表字段时不起作用 背景: 使用Flask+Sqlalchemy+migrate时使用命令db migrate后表中字段并未新增 表结构如下: 如图, 新增begin_at, end_at字段, 但执行迁移命令时并未改变表字段 错误排查 排查1 ...

    Flask-migrate更新表字段时不起作用

    背景: 使用Flask+Sqlalchemy+migrate时使用命令db migrate后表中字段并未新增

    表结构如下:

    如图, 新增begin_at, end_at字段, 但执行迁移命令时并未改变表字段

    错误排查

    排查1

    查阅大量资料后,发现Flask-migrate库会依赖alembic, 以此记录每次更改的版本号

    这句话引起了我的注意

    compare_type属性在migrateions目录下 的env.py文件下的run_migrations_online函数中添加.像这样

    context.configure(
              …………
              compare_type=True,  # 检查字段类型
              compare_server_default=True # 比较默认值
              )
    

    但实际上添加了以后并没什么用。

    排查2

    怀疑是flask-migrate版本有问题,于是更新了flask和Flask-migrate库的版本号

    pip install -U Flask flask-migrate
    

    继续执行, 发现报错

    继续google后发现是因为我把本地migrations文件删了重新init,但数据库中的alembic_version表还存储着这个版本,导致无法migrate, 如下图这样

    删掉数据库存储的这条数据以后继续执行

    ? ? ? 一番查找之后使用下面命令完美解决

    Question

    **db stamp heads到底做了什么事? **
    翻阅flask-migrate文档会看到它的作用

    总结

    综合考虑,如果遇到上面的问题,在实在搜不到解决方案或者不管用的情况下,可以考虑下更新库的版本, 可能这个bug在新的版本就已被修复, 关于flask db的各个命令含义,适当了解也会解决不少问题

    建议不要一出问题就删除migrations文件, 它的作用就相当于git的版本控制, 如果一次版本出错就删整个存储包,那肯定会出问题, 不如多了解下其他命令, 考虑更好的解决方案。

    展开全文
  • PLSQL大批量更新表字段&replace使用

    千次阅读 2019-03-06 08:08:49
    PLSQL大批量更新表字段&amp;amp;replace使用不同SAVE_PATH数量 不同SAVE_PATH数量 --5260502 1 --select count(*) from YCPHOTO.DB_FILE t where T.SAVE_PATH=1 and t.path like '\\172.16.88.72\ycssupload%' -...
  • 更新表字段长度属性

    2019-09-25 13:45:48
    1、根据类全名定位对应类型ID select Local_ID,FullName from ubf_md_class ...2、根据类型ID定位对应数据表字段属性 select Local_ID,Local_Class_ID,Name,Length from UBF_MD_Attribute where Local_Class_ID ...
  • mysql 定时更新表字段列的值状态(存储过程+定时任务) 来源:WEB开发网 杨恒飞的微博 核心提示:现在又两个表tcm,doc;db_count: id count1 2202 3003 2204 2225 240db_date:id t_date 现在又两个表tcm,doc;...
  • 业务需求:将姓名为张三的籍贯改成满族 原表: 修改后的表: sql:UPDATE bb set jg = ‘满族’ where jg = ‘汉’ and xm='张三’ bb:表名 set:需要修改的内容
  • oracle对已创建的表设置字段不为空,并设置默认值 --不为空 alter table 表名modify 字段名 not null;--默认值 altertable表名 modify字段名 default0;
  • oracle 批量更新表字段

    2018-02-27 16:27:00
    (三)批量修改表字段中指定字符   UpdateTime--2017年8月23日08:44:34  1.1.22 替换字段中指定字符串  -- 将PATIENT_AUTO_IMAGEINFO表中字段IMAGE_ADRESS中的#号转换成_ UPDATE PATIENT_AUTO_...
  • 更新时间:2020年12月22日(周二)19点预计时长:2小时是否停服:否版本代号:Web 6.1(移动端需同步强制更新)主要更新功能日历视图日历视图让用户能从时间维度排列并管理业务数据,强化业务员的时间管理能力。...
  • H2数据库更新表 重复的步骤就不贴了 dml语句都要经过CommandContainer中的update方法咱就直接从这进 @Override public int update() { recompileIfRequired(); setProgress(DatabaseEventListener.STATE_...
  • pg数据库使用 ALTER TABLE schema.table ALTER create_date TYPE VARCHAR ( 32 ); schema: 表所在schema 模式名 table : 表名 create_date : 字段名
  • void ...Mapper接口的写法,一个list集合,一个表字段名对应的实体类属性字段 &lt;update id="updatebatchInspectionCode" parameterType="java.util.List"&g...
  • jpa 动态sql 部分更新表字段

    千次阅读 2018-08-13 18:42:25
    @Transactional @Modifying(clearAutomatically = true) @Query(value = "update info p set p.status =?1 where p.id = ?2",nativeQuery = true) int updateStatusById( String status, ...1.更新i...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,002
精华内容 400
关键字:

更新表字段