MySQL 中,insert语句中的value与values的区别

向表中所有的列插入数据(插入多行数据):

   insert  into  表名 values

  (列值1,列值2,列值3...列值n),

  (列值a,列值b,列值c...列值n),

         ...........

  (列值A,列值B,列值C...列值N)

向表中指定的列插入数据(插入单行数据):

   insert  into  表名(列名1,列名2,列名3...列名n) value (列值1,列值2,列值3...列值n)

注意:

  • 表名()中列名必须跟values()中列值,一一对应
  • 使用INSERT INTO table_name指定要添加记录的表名。
  • 在VALUES关键字后,按照表中定义的列的顺序,用逗号分隔添加要插入的值。
  • 可以选择指定列名,也可以直接提供值
  • 虽然在数据库中,两者可能只是效率上有差距,但是在Spring框架中,进行单行数据插入最好还是使用value,插入多行数据才使用values,否则,会导致很多奇怪的问题出现。

以下是结合Spring框架所产生的问题以及解决方法。

在使用SpringMVC做数据库增删改查的业务中,尝试插入业务,于是在controller里面使用

@PostMapping
    public type save(@Validated @RequestBody User user, BindingResult result){
        if (result.hasErrors()){
            return xxx;
        }
        xxxx;
        return xxx;
    }

 进行参数传递,此时mapper里是这样的:

<insert id="insert">
        insert into user(id,age,name) values (#{id},#{age},#{name})
    </insert>

 使用postman进行接口测试时,控制台总是报错,提示:JSON parse error: Invalid UTF-8 start byte 0x80.

postman显示400,由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者虚拟的请求路由),服务器无法或不会处理当前请求。

于是,开始查找是否是注解有问题,可是查阅了各种资料并未发现其问题。

此时,甚至怀疑是否又是Spring版本问题导致的,但是项目使用的版本全是最新版本,应该没有版本不兼容问题。

在尝试了其他方法(方法注解设置编码格式等等,但参数上的注解已经告诉Spring框架默认的处理方式是能够满足需求的),问题仍然未得到解决。

最终在maper里找到了问题所在,insert字句使用时,可以使用value与values,可我的业务是单条执行,按照道理来说并不需要values,于是尝试修改valuesvalue,问题得到解决。

<insert id="insert">
        insert into user(id,age,name) value (#{id},#{age},#{name})
    </insert>

但此时,查找文章,value和values并无冲突之处,但在SpringMVC框架中,做参数传递时,mapper里面还是按照要求书写,否则可能会产生意想不到的问题。

参考文章:

MySQL insert value与values - 小白菜» - 博客园

Mysql插入语句之value与values区别_mysql values和value-优快云博客

感谢大佬

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值