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