mysql总结

1. 当不存在才插入,防止主键重复错误

  insert into TABLE
        (openId)
    select
        #{openId}
    where not exists
        (select openId from TABLE where openId=#{openId})

多字段

insert into stock_quantity(id, product_id, stock_id, quantity, lock_quantity, version, created_by, created_time, updated_by, updated_time, del_flag) select
            #{id}, #{productId}, #{stockId}, #{quantity}, #{lockQuantity}, #{version}, #{createdBy}, #{createdTime}, #{updatedBy}, #{updatedTime}, #{delFlag}
        FROM DUAL
        WHERE NOT EXISTS (select id from stock_quantity where product_id = #{productId} and stock_id = #{stockId})

但是只在5.7以上才有用,对于5.6可以用

  INSERT INTO TABLE (openId) VALUES (#{openId}) ON DUPLICATE KEY UPDATE  openId = #{openId}

2. 类型为char的时候 - 20180824

在用jpa的时候查询遇到StringIndexOutOfBoundsException: String index out of range: 0 被这个错误浪费了好几个小时。
后来发现当字段类型为char当时候而且字段值为空,就会报这个错误,猜测是因为char类型会自动用空格填充,改用varchar问题解决

3. select中使用前一个字段别名

select column1+10 as c1,(select c1)+10 as c2 from table1;

4. 更新表,把本表作为条件的时候报错

报错sql:

UPDATE order SET creator_id = '2' where order_id in (SELECT order_id FROM order where customer_id = 'A' )

应该再嵌一层

UPDATE order SET creator_id = '2' where order_id in (SELECT order_id FROM  (SELECT order_id FROM order where customer_id = 'A' ) temp)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 此文最后修改于:12/11/2017 3:05:33 PM 涨姿势 ①DDL(Data Definition La...
    Cinque_Peng阅读 240评论 0 0
  • 最近我处理了一个项目的数据库迁移,从oracle 11g迁移至mysql 5.7,其中的一项主要工作就是对代码中的...
    SawyerZhou阅读 4,405评论 0 8
  • 参考文档 从Oracle转到Mysql前需了解的50件事 MySQL与Oracle 差异比较之一 数据类型 MyS...
    jackcooper阅读 2,392评论 0 11
  • 写在前面 SQL注入算是CTF,网站安全的一大部分,为了挖掘更骚的姿势,方便以后使用,小白特地温习了MySQL的文...
    白里个白阅读 1,244评论 1 3
  • 他没有跟任何人说过话。 他向你走来。 他对你说,你的身后有人。 你很诧异,你向后转身,空无一人。 你回过身来,也未...
    爱憎分明不讨巧阅读 235评论 1 0

友情链接更多精彩内容