在项目中使用mybatis做为持久层框架,mysql数据库。项目上线前,DBA要求我们将每张数据库表中的字段都设置默认值和not null。之前项目中有一些insert语句是将表中所有字段都列出来,然后把它做为一个通用的插入语句来使用。举个简单的例子:假如一张数据库表blog中有如下几个字段:id,title,content,author,除id外,每个字段都设置了默认值Empty String(空字符串),写的一个insert语句是这样的:
<insert id="addOneBlog" parameterType="main.Blog">
insert into blog(title,author,content)
values(#{title},#{author},#{content})
</insert>
原以为有这么一个insert语句就万事大吉了,我们以为,以后做插入操作的时候,无论有多少个字段,都使用这一个insert语句,如果字段没有值,就会被赋值为mysql字段的默认值。。。
但事实证明,根本不是这样的。
当我们只给title字段赋值,然后执行一个insert语句时,mybatis马上报出这样的异常:
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字段设计
在使用mysql的过程中,有个问题就是mysql的优化,mysql中longblob字段在5.5版本中默认的为1M。 想改变这个问题,需要注意几点: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (2054817 > ...
MySQL字段类型说明 MySQL字段类型说明
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是...
解决CodeSmith不能读取MySQL字段备注说明,已经编译过,可以直接使用,解决win10系统中CodeSmith不能读取MySQL中Comment
MySQL数据库字段加密,设置数据库字段类型,设置加密盐为全局变量
本文介绍MySQL数据库使用SQL语句来在现有的表中,添加一个新的字段,包括设置字段的是否为空、默认值等
MySQL 添加字段的语法格式如下: ALTER TABLE <表名> ADD <新字段名><数据类型>[约束条件]; 对语法格式的说明如下: <表名> 为数据表的名字; <新字段名> 为所要添加的字段的名字; <数据类型> 为所要添加的...
环境 MySQL 5.1 + 命令行工具 问题 MySQL表字段设置默认值 解决 代码如下: –SQL: CREATE TABLE test( i_a int NOT NULL DEFAULT 1, ts_b timestamp NOT NULL DEFAULT NOW(), c_c char(2) NOT NULL DEFAULT ‘1’ )...
本文主要内容是MySQL升级到5.7版本之后,由于默认的 sql_mode 值带来的坑以及对应的解决方案。 案例一:ONLY_FULL_GROUP_BY 问题描述 MySQL版本从5.6升级至5.7之后,部分SQL执行报错,报错信息如下: ERROR 1055 ...
主要给大家介绍了关于Linux修改MySQL配置不生效问题的解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Linux系统具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
PostgreSQL与mysql字段对比.docx
MySql所有字段类型及长度范围,可以参考下
使用CodeSmith编写MySQL模板的时候,会发现一个问题:MySQL数据表中的列说明获取不到, 网上找了个教程:http://www.cnblogs.com/LonelyShadow/p/4147743.html 然后里面没有dll下载,我就参照他的做法搞了下,需要的...
mysql获取字段中内容
Mysql5中所有的字段类型稍微整理了一下。 仅供参考。
Mysql字段类型说明
MySQL批量对表增加指定字段,会快速实现批量字段的添加。写了2个存储存储过程,执行即可。方便快速!
查询某个字段的时候需要给一个字段同样的值。 这个值你可以写死,也可以从数据库获取 1、写死值 SELECT mfr_id AS mfrId, mfr_name AS mfrName, IFNULL(NULL, 587694978080178176) AS suppId FROM mater_prod ...
MySql字段类型,各个字段得定义,使用。