对数据库事物的理解
什么是事物
事物通俗的来讲就是就是一组操作事件,可以类比于Java里面的原子操作。在一个事物中,要么全部成功,要么就是全部失败。
mysql中的事物
在Mysql的innodb
中,事物的默认级别是 可重复读
,在该级别下,事物可能出现幻读。出现幻读的情况是该引擎为行级锁,导致mysql在进行一个事物的时候只会锁定与该事物有关的几行。
事物通俗的来讲就是就是一组操作事件,可以类比于Java里面的原子操作。在一个事物中,要么全部成功,要么就是全部失败。
在Mysql的innodb
中,事物的默认级别是 可重复读
,在该级别下,事物可能出现幻读。出现幻读的情况是该引擎为行级锁,导致mysql在进行一个事物的时候只会锁定与该事物有关的几行。
今天突然有一个写sql的机会,但是是手写,不像之前那样可以在数据库上做测试。这突然让我感觉有的语法有点生疏了,所以乘着这个机会来做一个全部的梳理。
今天是有两表做一个等值连接查询的,在这里应该是先where之后再进行group by,group by
是对where
条件过滤之后再进行分组处理,所以where在前。
这个函数可以将日期往前加上规定的年,月或者日,从而方便统计,例如需要统计本月的某些数据的话,一般来讲肯定是只需要大于本月月初即可,但是为了考虑程序的健壮性的话肯定是需要再加一个限制条件,比如说小于下个月1号。那么就需要一个一个DATE_ADD()函数:
1 | SELECT |
这条sql便是求的本月的数据。同时在这里也对当前时间的函数进行一个对比:
1 | mysql> SELECT CURDATE(); |
先看在mysql 5.7版本中的一个的group by,以下是这个数据库表:
1 | mysql> select * from testgroupby; |
这是一个学生成绩数据库表。那么在MySQL5.7版本中执行它的话是会出现一个error的。如下所示:
1 | mysql> select * from testgroupby group by user_name; |
由于自己有点需求需要在mysql中按照时间段进行查询,而自己又对这些不太了解,所以趁着这次机会将mysql和时间段相关的查询语句做一个记录:
DATE_SUB(date,INTERVAL expr type)
这个函数的date是一个时间表达式,一般取得是数据库中的一个字段。后面的INTERVAL
一般来讲是不变的,expr
一般是一个时间段,代表过去的,比如是30天,那么这里就是30,若是60,这里就是60,type
则表示的是一个时间属性(可能表达的不是很准确),如下:
一般来讲在sql中嵌套查询在where之后以便于查询范围的限制。
现在有一个情况就是就是现在嵌套查询的话是需要查询出结果值然后返回为一个字段。
select <表达式>(select<表达式>)as name
这样作为一个查询。
首先在括号()
里面的一个select语句是可以作为一个字段的,可以通过在后面加一个as 字段
从而返回的是一个字段。、
那么这样书写sql之后便可以作为一个字段然后返回结果了。但是这样写有一个弊端,就是若没有groupby,则会导致查询出来的数据会有多余重复得。
类似下面这条sql: