在项目中使用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语句无法做到通用。具体解决方案将在下一篇中介绍。
分享到:
相关推荐
然而,当试图通过Navicat或其他数据库管理工具修改已有表的字段默认值时,可能会遇到错误`1067-Invalid default value for 'CREATE_TM'`。这是因为在某些MySQL版本(如5.6及之前)中,不支持在ALTER TABLE语句中直接...
在进行软件开发过程中,可能会遇到这样的问题:原本在本地Windows环境下运行良好的MySQL数据库应用程序,一旦部署到Linux服务器上,就开始出现“找不到指定的表”这类错误。这通常发生在表名或字段名在代码中被误用...
- 如果以上步骤都不能解决问题,建议寻求MySQL官方或第三方专业支持,他们可能有更专业的手段来处理这类复杂问题。 请记住,对MySQL的任何修改都应谨慎进行,并确保有最新的数据库备份,以防止数据丢失。在进行...
若上述步骤均未能解决问题,则可尝试使用MySQL提供的Instance Configuration Wizard工具重新配置MySQL实例。具体步骤如下: 1. **打开Wizard**:启动MySQL Instance Configuration Wizard。 2. **配置安全设置**:...
在MySQL数据库中遇到乱码问题通常涉及到字符编码设置不一致或不正确的情况。当数据存入数据库时出现乱码,这可能是由于在数据传输、存储或显示的过程中,字符集配置不匹配导致的。下面我们将详细探讨如何解决MySQL中...
### Win2012系统上安装MySQL 5.7.17.0及配置远程访问详解 #### 一、安装MySQL 5.7.17.0 在Windows Server 2012环境下安装MySQL 5.7.17.0,首先需要下载MySQL的安装程序,通常可以从MySQL官网或其他可靠的资源站点...
MySQL数据库在5.7版本之后,对于`date`和`datetime`类型的字段,设置默认值为"0000-00-00"时会出现错误提示“Invalid default value for 'time'”。这个问题源于MySQL的`sql_mode`配置,特别是其中的`NO_ZERO_IN_...
因此,要解决MySQL无法存储Emoji表情的问题,需要将数据库、表以及字段的字符集都调整为utf8mb4。 首先,需要修改MySQL配置文件my.ini,在[mysql]和[mysqld]部分设置正确的字符集。具体操作如下: 1. 找到MySQL...
5. **解决方案一**:修改字段默认值。将`shunxu`字段的默认值设置为0,这样在插入数据时,如果没有指定值,就会自动填充0,符合整数字段的规则。 6. **重启服务**:更改默认值后,重启MySQL服务,以确保改动生效,...
为了解决这个问题,我们需要告诉 MyBatis-Plus 不要为 `id` 字段生成默认值,而是由我们自己提供。这可以通过在实体类的 `id` 字段上添加 `@TableId` 注解来实现。`@TableId` 注解用于指定主键字段,其中的 `value` ...
如果遇到服务启动失败,检查错误日志并根据错误信息调整配置文件,运行mysql_upgrade脚本,并确保配置文件路径与实际MySQL服务安装路径一致是解决问题的关键步骤。同时,在进行这些操作时要保持细心和耐心,因为这些...
- `auto_increment_increment`:定义了自增字段每次递增的步长,默认值为1,即每次递增1。 - `auto_increment_offset`:设置了自增字段的初始值,默认也为1。这意味着第一条记录的自增ID将是1。 2. **设置自增...
当尝试使用`INSERT`语句向`mysql.user`表插入新记录时,如果该记录没有显式地指定`ssl_cipher`字段的值,而该字段又没有默认值,则会触发上述错误。 #### 解决方案 ##### 方法一:使用GRANT语句替代INSERT 为了...
在MySQL中,有时候我们需要将数据表中的列转换为行,或者合并多个字段为一个新的单一字段。这在处理数据报告或数据分析时非常有用。本文将详细解释如何实现这一目标。 首先,我们来看列转行的方法。这里主要使用的...
这个问题源于MySQL的一个系统变量`group_concat_max_len`,该变量限制了`GROUP_CONCAT`函数返回结果的最大长度,默认值仅为1024字节。 `group_concat_max_len`的作用是设定`GROUP_CONCAT()`函数在返回结果时能够...
_注意:在MySQL中,上述`CHECK`约束不会生效。_ #### 三、单列约束与多列约束 - **单列约束**:指的是每个约束只作用于表中的一列。 - 例如,`NOT NULL`约束通常应用于单个列。 - **多列约束**:指的是约束可以...
5. **保持连接字段类型一致并建立索引**:在进行连接查询时,连接字段应同时在两张表上建立索引,并保持相同的数据类型,以利于MySQL优化连接操作。不匹配的字段类型(如DECIMAL与INT)或不同的字符编码可能导致索引...
MySQL数据库是世界上最受欢迎的开源关系型...总的来说,解决MySQL远程不能访问的问题,关键在于修改配置文件以监听所有IP,以及更新用户权限以允许远程连接。这两种方法可以根据你的具体需求和安全策略灵活选择和应用。
根据提供的文件内容,我们可以归纳和扩展出MySQL命令的相关知识点,主要涵盖数据库管理、表操作、数据操作以及数据导入等方面。 ### MySQL 命令基础知识 #### 显示命令 1. **显示当前数据库服务器中的数据库列表**...