一.mysql书写顺序和执行顺序都清楚了吗?
大家学了mysql应该都会写sql,但是sql运行执行顺序还时有一部分人比较陌生,内部运行不是按照书写顺序的,而是有一套规则,如下.
| Sql书写顺序和sql执行顺序(圆括号()是执行顺序,方括号编写顺序 |
| (1)from [1] (6) avg,sum [6] |
二.where 与 having的区别?
1.where后不能有聚合函数,having后可以有
2.where分组前过滤,having用于分组后的筛选。
三.alter,modify,change 区别与联系?
只更改列类型,选modify。例如: 学号原来varchar(10) 修改为20。
| Alter table studentinfo modify column studentid varchar(20) |
更改列,更改列类型(列类型可更改也可不更改)
| Alter table studentinfo change column sudentid studentnumber varchar(30) |
(注: studentinfo 表名,sudentid原来学号,studentnumber修改后的学号 )
四.并发访问数据库容易产生哪些问题?
事务在操作时的理想状态: 所有的事务之间保持隔离,互不影响。因为并发操作,多个用户同时访问 同一个 数据。可能引发并发访问的问题。
| 并发访问的问题 |
说明 |
| 脏读 |
一个事务读取到了另一个事务中尚未提交的数据 |
| 不可重复读 |
一个事务中两次读取的数据内容不一致, 要求的是在一个事务中多次读取时数据是一 致的. 这是进行 update 操作时引发的问题 |
| 幻读 |
一个事务中,某一次的 select 操作得到的结果所表征的数据状态, 无法支撑后续的业务 操作. 查询得到的数据状态不准确,导致幻读. |
五.什么隔离级别,可以防止脏读和不可重复读?
通过设置隔离级别,可以防止上面的三种并发问题。
mysql数据库有四种隔离级别如下:
(上面级别最低,下面级别最高,? 会出现问题,? 不会出现问题)
| 级别 |
名字 |
隔离级别 |
脏读 |
不可重复读 |
幻读 |
数据库的默认隔离级 别 |
| 1 |
读未提 交 |
read uncommitted |
? |
? |
? |
|
| 2 |
读已提 交 |
read committed |
? |
? |
? |
Oracle和SQLServer |
| 3 |
可重复 读 |
repeatable read |
? |
? |
? |
MySql |
| 4 |
串行化 |
serializable |
? |
? |
? |
|