问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mySQL里建好表后 又手动修改字段的默认值为什么不生效呢?

发布网友 发布时间:2022-04-10 17:54

我来回答

3个回答

懂视网 时间:2022-04-10 22:15

  •     insert into blog(title,author,content)  
  •     values(#{title},#{author},#{content})  
  • </insert>  


  •     原以为有这么一个insert语句就万事大吉了,我们以为,以后做插入操作的时候,无论有多少个字段,都使用这一个insert语句,如果字段没有值,就会被赋值为mysql字段的默认值。。。 

        但事实证明,根本不是这样的。 

        当我们只给title字段赋值,然后执行一个insert语句时,mybatis马上报出这样的异常: 


    Java代码  技术图片
    1. Caused by: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Column ‘content‘ cannot be null  



        显然,所有字段规定了not null,看来按照这种insert的方法,未赋值的字段并没有赋值为mysql的默认值。 

        那么如果把数据库字段的not null限制去掉呢? 

        再次执行刚才的insert操作,这次没有抛出异常,但查看数据库后,我们发现,新插入的表记录中,没有赋值的字段仍然不是mysql的默认值,而是null值。 

        所以,按照上面所谓的通用insert语句,是无法让未赋值字段的值变为mysql默认值的。这种insert语句无法做到通用。具体解决方案

     

    上一篇简单介绍了一个mysql的问题:字段默认值在使用全字段insert的时候,可能并不会生效。在使用mybatis时,虽然需要自己写sql,但相比原始jdbc的方式来说,有一个很好的优势——动态sql。针对前一篇文章提出的问题,mybatis的动态sql可以很好地解决这个问题。

    1.问题分析

        上一篇文章中描述的问题,是由于我们误将一个包含所有字段的insert语句做为通用的insert。那么显而易见,解决此问题的方法是,我们需要针对不同的业务需求,严格按照需要插入的字段来写不同的sql,不需要插入的字段,在insert语句中不能够出现。举例上一篇的blog表例子说明,假如我们有一个插入操作,只需要在插入时给author赋值,那么sql可以这么写:

     

    Xml代码  技术图片
    1. <insert id="addOneBlog" parameterType="main.Blog">  
    2.     insert into blog(author)  
    3.     values (#{author})  
    4. </insert>  

     

     

        这个方法虽然奏效,但在实际项目开发中,为了开发效率的需要,我们仍然希望能够有一个通用的insert语句,供所有涉及单表插入操作的业务调用。刚才说过,mybatis有一个非常强大的特色功能:动态sql,使用动态sql即可解决此问题。

    2.<sql>、<include>、<trim>标签简介

        mybatis的动态sql功能包含了很多实用的标签:<sql>标签表示一个sql片段,使用此标签不仅可以重用很多sql代码,而且使sql语句更清晰;定义好<sql>标签后,在调用它的地方使用<include>标签,即可将定义好的sql片段拼接进来;<trim>标签可以在标签体内的sql片段首尾任意添加或覆盖字符。

    3.问题解决

    先上代码:

     

    Xml代码  技术图片
    1. <sql id="blogColumns">  
    2.     <trim suffixOverrides=",">  
    3.         <if test="title != null">title,</if>  
    4.         <if test="author != null">author,</if>  
    5.         <if test="content != null">content</if>  
    6.     </trim>  
    7. </sql>  
    8.   
    9. <sql id="blogValues">  
    10.     <trim suffixOverrides=",">  
    11.         <if test="title != null">#{title},</if>  
    12.         <if test="author != null">#{author},</if>  
    13.         <if test="content != null">#{content}</if>  
    14.     </trim>  
    15. </sql>  
    16.   
    17. <insert id="addOneBlog" parameterType="Blog">  
    18.     insert into blog(<include refid="blogColumns"/>)  
    19.     values (<include refid="blogValues"/>)  
    20. </insert>  

         对于blog表,上面这段代码即可实现我们想要的insert重用,不管插入的字段有多少,我们都可以使用它来实现所有单表insert操作。上面代码中,先定义两个sql片段,分别代表insert语句中的字段列表和参数列表,并使用<trim>标签去除片段首尾可能出现的多余的“,”字符。最后写一个简单的insert,并将上面的sql片段拼接进来。

    4.结尾

        关于mybatis的动态sql,它有很多强大的,可高度重用sql的功能。大家如果对一些标签的作用不太清楚,请期待我后续的博文。作为一个半自动的持久层框架,我们虽然需要自己写sql语句,但mybatis的动态sql能够最大限度地减少我们的代码量,这也是在ORM横行的JavaEE世界里,mybatis能够独树一帜的原因。

     

     

    mysql字段默认值不生效的问题解决(上)

    标签:l数据库   boto   order   添加   src   表示   icon   family   包含   

    热心网友 时间:2022-04-10 19:23

    你没有保存吧,你退出后再进去看看默认值是不是还是一样?

    热心网友 时间:2022-04-10 20:41

    你有保存吗? navicat 举例

    追问我是在创建好表后进行的修改 语句和手动修改都试了 我有保存呢 退出打开后 表结构里吗已经有改过 默认值就是0 但是 select查询出的结果还是没变呢?

    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    交通事故致人死亡,该如何处理? 爱普生LQ1600KIIIH 断色带 爱普生针式打印机LQ1600KⅢH近两月来总频繁中断打印,同时电脑显示是通讯... ACQUA DI PARMA 帕尔玛之水 蓝色地中海系列 桃金娘加州桂中性淡香水 E... 女士香水推荐-ACQUA DI PARMA 帕尔玛之水 优雅木兰女士浓香水 EDP 50... ACQUA DI PARMA帕尔玛之水克罗尼亚系列中性香水套装-适用对象 帕尔玛 | 必须拥有的小众沙龙香 ACQUA DI PARMA/帕尔玛之水克罗尼亚系列黑调男士古龙水-适用对象 ACQUA DI PARMA 帕尔玛之水 克罗尼亚系列 风度中性古龙水 EDC 20ml... ACQUA DI PARMA/帕尔玛之水-绅士男士古龙水EDC 非正义联盟扎塔娜塔罗牌有什么用 一副22张大阿卡娜塔罗牌每张牌所代表的意思 赛尔号2的最后两个boss是什么(隐藏的),谁知道什么时候开 今年农历三月哪天适合烧香拜佛? 到寺庙里上香求平安怎样选日子?哪一天比较好呢? 求本月上香吉日 什么日子烧香 一月中哪天是烧香的佳期 道教每月什么时间供香最好 - 信息提示 去庙里烧香的最佳时间 烧香什么时间最好? 一般初一、十五烧香可是碰巧《如来选择烧香日》干支日是恶鬼查斋日,烧还是不烧?希望大师告知,谢谢! excel07中怎么给柱状图填充阴影 6厘米等于几分之几分米 6角是几分之几元 6等于6分之几=5又几分之几 一点六等于几分之几等于百分之多少等于几比几等于一又几分之几? 6分米=几分之几米? 6分是几分之几角? mysql 设置了默认值了为什么还是会报column cannot be null 招行信用卡取消了怎么恢复 招行信用卡注销了能恢复吗 事业单位社保中断调动手续怎么办 中间中断三年的社保可以申请社保转移吗 请问如何办理社保转移?中断之后还可不可以补交 mysql数据库varchar默认值不显示 网恋奔现第一次见面第一句话该怎么说? 网恋奔现开场白是怎样的? 你网恋第一次见面说的第一句话是什么? 网恋第一次见女朋友,该说什么? 网恋很久的情侣第一次见面如何快速进入状态,避免尴尬和陌生? 网恋 第一次和网恋女友见面应该怎么说怎么做? 网恋后第一次见面说什么 网恋第一次见面应该注意些什么 给孩子起名(高分)! 请问魔兽世界德鲁伊的大鸟任务流程有哪些? 招行信用卡,金卡怎么办? 招商银行信用卡金卡怎么申请啊 Mysql如何修改表添加默认值,用了几种方法都不对,求正解