1、查询
//查询单分数最高的人ID
select stuid,max(score) from stu_select_class;
// 查询各科总分2-3名的学生
select stuid, sum(score) from stu_select_class group by stuid limit 1,2;
//查询每科的最高分学生
select classname,stuid,max(score) from stu_select_class group by classname;
//查询总分低于140的学生
select stuid, sum(score) from stu_select_class group by stuid having sum(score)<140;
//查询总平均分在60-80的学生
select stuid, avg(score) from stu_select_class group by stuid having avg(score) between 60 and 80;
//查询。。。。的学生
select stuid, sum(score),avg(score) from stu_select_class group by stuid having sum(score)<140 and avg(score) <80;
//查询总分。。的学生人数。
select distinct count( stuid) from stu_select_class group by stuid having sum(score)<140 and avg(score) <80;
//查询。。。的学生人数
select count(distinct stuid) from stu_select_class where classname='english' and score <100;
2、存储引擎
InnoDB和MyISAM
区别:
(1)InnoDB支持事物,而MyISAM不支持事物
(2)InnoDB支持行级锁,而MyISAM支持表级锁
(3)InnoDB支持MVCC, 而MyISAM不支持
(4)InnoDB支持外键,而MyISAM不支持
(5)InnoDB不支持全文索引,而MyISAM支持。
平台上承载的大部分项目是读多写少的项目,而MyISAM的读性能是比Innodb强不少的。
3、
(1)varchar与char的区别
char是一种固定长度的类型,varchar则是一种可变长度的类型
(2)varchar(50)中50的涵义
最多存放50个字节
(3)int(20)中20的涵义
int(M)中的M indicates the maximum display width (最大显示宽度)for integer types. The maximum legal display width is 255.
4、MySQL事务管理
ACID解释:
原子性:事务必须是一个不可分割的整体,就像做事情有始有终。
一致性:执行完数据库操作后,数据不会被破坏。打个比方,如果从 A 账户转账到 B 账户,不可能因为 A 账户扣了钱,而 B 账户没有加钱
隔离性:必须保证数据库操作之间是“隔离”的,当我们编写了一条 update 语句,提交到数据库的一刹那间,有可能别人也提交了一条 delete 语句到数据库中。也许我们都是对同一条记录进行操作,可以想象,如果不稍加控制,就会出大麻烦来。于是规范了四大事务隔离级别。
持久性:当我们执行一条 insert 语句后,数据库必须要保证有一条数据永久地存放在磁盘中。
隔离性解决了高并发情况下问题。
(1) 脏读:事务 A 读取了事务 B 未提交的数据,并在这个基础上又做了其他操作。
(2)不可重复读:事务 A 读取了事务 B 已提交的更改数据。
(3)幻读:事务 A 读取了事务 B 已提交的新增数据。
第一条是坚决不允许的
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
READ_UNCOMMITTED | 允许 | 允许 | 允许 |
READ_COMMITTED | 禁止 | 允许 | 允许 |
REPEATABLE_READ | 禁止 | 禁止 | 允许 |
SERIALIZABLE | 禁止 | 禁止 | 禁止 |
mysql隔离界别默认是READ_COMMITTED。
带保存点的事务
保存点(Savepoint)用来通知系统应该记住事务当前的状态,以便当之后发生错误时,事务能回到保存点当时的状态。
对于扁平事务来说,在事务开始时隐式地设置了一个保存点,回滚时只能回滚到事务开始时的状态。下图是回滚到某个保存节点的实例: