mysql(增,删,改,默认值问题,Bewteen and 边界问题,日期相加、相减问题,UNION ALL)

1. 若主键是可以自增的,那么插入的数据主键即使为NULL,MySQL也会自动为其分配一个主键。

INSERT INTO t_person VALUES(NULL,'小大宇',22,'1','suZhou','MySQL Lover');

在这里插入图片描述

2. 同时插入多条数据

INSERT INTO t_person(name,age) VALUES('小雨',22),('大雨',22),('暴雨',22);

在这里插入图片描述

3. 将查询结果插入到表中

INSERT INTO t_person(name,address)
SELECT accountName , accountAddress FROM t_info;

在这里插入图片描述

4. 默认值问题

如果一个字段拥有了默认值,但是又显示的给其赋值为 null,那么会插入null。
在这里插入图片描述
t_tag表中,articleId列已经设计为默认值为5。执行下面的SQL后

– articleId 默认值为 5

INSERT INTO t_tag(name,articleId) values ("a",null);
INSERT INTO t_tag(name) values ("a");

在这里插入图片描述
从实际结果来看,即使我们为articleId设计了默认值,但是在第一条SQL中显示的指明了它为null,所以在数据库中实际将会插入NULL。若像第二条SQL语句一样,没有指明此列,更没有此列的值,那么就用默认值实际插入某条记录。

我现在遇到的问题是,用户传递的articleId列数据确实是null,但是SQL语句又要像第一条SQL那样的写法,即在插入的参数列表中,有articleId这样的列。为了防止插入是空,只能用硬编码。

INSERT INTO t_tag(name,articleId) values ("a",IFNULL(#{ item.articleId } , 5)); 这里的5是articleId的默认值。

Mybatis还有一种办法就是,使用IF TEST 语句来控制列的存在。 在 articleId 这一列上,加上 IF TEST 控制。

<if test="organoizationProportion!=null and organoizationProportion !=''">
            ,COST_ORGANIZATION_PROPORTION
        </if>

5. Bewteen And用法边界问题

mysql数据库使用between and 的不包含右边界问题
sql server两边都包含
https://blog.csdn.net/qq_32712809/article/details/85246602

6. mysql日期加减法:

DATE_ADD(‘2017-12-30’, interval 1 DAY ) — 加法
DATE_SUB(‘2017-12-31’, interval 1 DAY ) — 减法

7. 合并查询结果集

如果使用UNION ALL 可以连接多条查询语句,并将它们的结果集组合起来。

语法为

SELECT column ,...  FROM table1

UNION [  ALL ]

SELECT column ,...  FROM table2

不加ALL的效果:返回结果中删除重复的记录。

使用关键字ALL的作用是不删除重复行也不对结果进行自动排序。

合并时,两个表对应的列和数据类型必须相同。

UNION 和 UNION ALL 的区别

        使用UNION ALL 的功能是不删除重复的行,因此他只是单纯的把多个查询语句的结果合并起来,它执行SQL的时候需要的资源少,所以尽可能的使用它。

        如果希望保留重复的行或者确定不会有重复的行的时候,合并查询结果集的关键字用UNION ALL 来提高效率。
SELECT * FROM t_student;

在这里插入图片描述

SELECT id,name,teacherId FROM t_student WHERE id = 1
UNION ALL 
SELECT id,name,teacherId FROM t_student WHERE id = 2

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值