事务:
所谓事务,就是定义一个操作序列,这些操作同生共死,要不全部执行要不全部不执行。
事务的基本属性:
● Atomic(原子性):事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败。
● Consistency(一致性):只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态。
● Isolation(隔离性):事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。
● Durability(持久性):事务结束后,事务处理的结果必须能够得到固化。
group by
group by是用来分组的,一般跟聚合函数(sum,max,min,avg,count)同时使用。
比如这样个表tmp:
类型 值
A 8
B 6
A 9
B 4
如果 select max(值)from tmp
则返回一个值 9
但要是 select max(值)from tmp
group by 类型
则返回两个值 9
6
group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面
如果有如下查询语句(该语句是错误的,原因见前面的原则)
select A,B from table group by A
正确如下:
如果需要对分组后的数据进行条件限制(也就是筛选)应该怎么办呢?
使用Having
where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。通常,你需要通过在HAVING子句中重复聚合函数表达式来引用聚合值,就如你在SELECT语句中做的那样。例如:
SELECT A COUNT(B) FROM TABLE GROUP BY A HAVING COUNT(B)>2
StringBuffer,StringBuilder,String区别
StringBuffer:线程安全
StringBuilder:非线程安全
在执行修改字符串时。例如
String a="abc";
a+="de";
实际上,程序先建立一个StringBuffer,然后调用append()方法,再调用toString()方法。比直接使用StringBuffer多了一些操作,效率变低。而且String不可变,每次修改时,会多出一些无用的对象,给垃圾回收造成负担。
1.如果要操作少量的数据用 = String 2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder 3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
final,fianlly,finalize的区别
final用于声明属性,方法和类。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是object类的一个方法,在垃圾回收器执行的时候调用被回收对象的此方法。通常用在对象被回收前资源释放等。