根据老师讲解,自己对学习的整理,非本人原创知识
条件查询 1.order by 排序select * from 表名 order by 字段名
根据字段名排序
select * from 表名 order by 字段名 desc / hiredate
按照字段名排序(倒序)/(升序)
默认为升序
2.limit 分页select * from 表名 limit 2
limit后跟一个数字代表只查询多少条数据
select * from 表名 limit 2,3
limit后跟两个数字代表从第n+1条开始展示,展示n条
3.统计select 字段名 from 表名 where 条件
展示满足条件来自某表的该字段
例如 select 工资(字段名) from 员工表(表名) where year(入职年份)=某年
统计某年入职的员工的工资
聚合函数可以把一列的数据聚合起来,继续分析
常见的聚合函数:MAX MIN SUM AVG COUNT
最大值 最小值 求和 平均值 统计
SQL语句
select max(字段名) from 表名
查询该字段中的最大值
select max(字段名) from 表名 where 条件
查询该字段中满足条件的最大值
select min(字段名) from 表名
查询最小值
select avg(字段名) from 表名
查询平均值
select sum(字段名) from 表名
求和
select count(1) from 表名
统计有多少条数据 1为通配符表示所有,同*星号
select count(字段名) from 表名
不推荐,因为不能统计null元素
分组 group by 分组select avg(字段名),字段名 from 表名
报错,出现了混合列,查询结果包含着聚合列和非聚合列
聚合列:使用了聚合函数的列
select 函数(字段名),字段名 from 表名 group by 字段名
按照字段名分组
分组,解决查询中出现的混合列报错
口诀:为什么要分组?查询中出现了混合列
按照什么分组合理,通常按照非聚合列进行分组
having 类似whereselect 函数(字段名),字段名 from 表名 group by 字段名 having 条件
按照字段名分组,且满足条件
事务英文名transaction 主要作用是来保证多条sql,要么全成功,要么全失败
四大特征:ACID考试题
原子性:同一个事务里的多条SQL语句,是一个原子密不可分,要么全成功,要么全失败
一致性:保证多台服务器里的数据是一致的(分布式系统)
隔离性:数据库为了提高操作的效率允许高并发的访问,并采用了隔离性保证了数据的安全性
持久性:是指,我们对数据库的操作(增删改)是持久生效的
查询不会让数据发生变化
隔离级别:
read uncommitted:读未提交,安全性最差,但是效率最高
read committed:读已提交,安全性有所提升,但是效率降低一些,Oracle数据库的默认隔离级别
repeatable read:可重复读,安全性有所提升,但是效率会更低一些,MySQL数据库的默认隔离级别
Serializable:串行化,安全性最高,但是性能最低
事务的管理方式1:使用MySQL数据库默认会为每条SQL提供事务,自动事务管理
方式2:手动管理事务,必须有两个过程:开启事务...结束事务(commit/rollback)
start transaction; #开启事务
insert into 表名 values valuses(数据); #执行SQL
commit; #提交事务
查看需要先将事务全部完成才可以查看的到,如果没有提交事务,数据不会上传
字段约束 默认约束给字段赋默认值
create table 表名(
字段名 类型 primary key auto_incarement, 主键 自动增加
字段名 类型(长度)default '数据' #default默认约束
)
检查约束添加判断条件
create table 表名(
字段名 类型 primary key auto_incarement,
字段名 类型,
check(判断条件) #check检查约束,当满足条件时才可以添加数据
)
外键约束create table 表1(
主键 类型 primary key auto_incarement,
字段名 类型,
...
)
create table 表2(
主键 类型 primary key , #不可以主键自增,因为要关联其他表
字段名 类型,
...
foreign key (表2主键) references 表1(表1主键)
#连接表1,让主键随着表1的主键增加而增加
)



