Mysql数据表字段设置了默认值,插入的对象中没有为这个字段赋值,最后插入报错,说该字段的值不能为null。

在使用 MyBatis 插入数据时,如果实体对象包含空属性,会导致数据库字段插入 null,从而影响默认值设置。通过切换到 insertSelective 方法,可以解决这个问题,因为此方法会自动忽略值为空的属性,防止 null 值插入数据库字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误原因:

对数据库的操作我使用了持久化工具mybatis,插入数据的时候插入的是整个实体,直接使用的是持久层的insert(实体对象)方法插入的数据

这样就会出现一个问题,当实体对象中某个属性值为空时,对应的数据库的字段就会插入null值,而默认值是插入时不指定该字段,该字段的值才会取默认值。

所以这里我是向设置了默认值的字段插入了null,才导致出现上述错误。

解决方法:

这时候我改用insertSelective(实体对象)方法插入实体对象就不会出现上述问题了

因为该方法会自动过滤掉实体对象中值为空的属性,对应的数据表字段也不会被插入null了。

转载于:https://blog.csdn.net/weixin_34010566/article/details/93589484

转载于:https://www.cnblogs.com/znsongshu/p/10121494.html

MySQL中创建表时,可以为字段指定默认值,并通过约束来设定其取范围。以下是详细的介绍: ### 设置默认值 你可以使用`DEFAULT`关键字为某个字段设置默认值。当插入新记录而未提供该字段的具体时,默认值将自动填充。 ```sql CREATE TABLE example_table ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL DEFAULT 'Unknown', age INT DEFAULT 18 ); ``` 在这个例子中,“name”字段如果未赋值则会获得字符串“Unknown”,"age"字段如果没有给定数,则会被赋予整数18作为初始。 ### 定义取范围 为了限制某一列的数据输入只能位于特定区间内,我们可以利用`CHECK`约束条件或者枚举(`ENUM`)数据类型来进行限定。 #### 使用 `CHECK` 约束: 从MySQL版本8开始全面支持标准SQL CHECK约束语法;之前的部分版本可能需要借助触发器等其他机制达到类似效果。下面是一个简单的实例演示如何应用这个特性: ```sql CREATE TABLE orders ( order_id int auto_increment primary key, quantity smallint unsigned not null, price decimal(6,2), status varchar(20), -- 添加检查约束确保quantity介于0到99之间 CONSTRAINT CHK_quantity CHECK (quantity >= 0 AND quantity <= 99) ); ``` 需要注意的是,在某些旧版的MySQL数据库上,尽管你能定义出这样的语句,但它实际上并不会强制执行这些规则直到升级至更高版本为止。 #### 枚举 (`ENUM`) 类型的应用: 如果你想要某字段只接受预设的一组离散之一的话,那么`ENUM`可能是更好的选择。例如: ```sql CREATE TABLE employees ( emp_no INT NOT NULL, first_name VARCHAR(14) NOT NULL, last_name VARCHAR(16) NOT NULL, gender ENUM ('M','F') NOT NULL, hire_date DATE NOT NULL, birth_date DATE, PRIMARY KEY(emp_no) ); ``` 这里我们规定了gender字段仅能存储'M'(男性)或'F'(女性),这相当于隐式地设置了它的有效取集合。 以上就是在MySQL里边怎样去配置字段默认值以及控制它们所能容纳的最大最小限度的方法啦!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值