目录

 1. Mysql分组查询

2. Mysql子查询

3. 单行函数

4. 事务

5. 权限与安全


1. Mysql分组查询

1、分组 group by

# 统计每个部门有多少个员工 SELECT COUNT(*) AS number,edid FROM emp  GROUP BY edid

2、演示group by和having

MYSQL 多层级 统计 各部门人数 mysql查询单个部门员工总数_database

MYSQL 多层级 统计 各部门人数 mysql查询单个部门员工总数_数据库_02

MYSQL 多层级 统计 各部门人数 mysql查询单个部门员工总数_database_03

# 统计每个部门的年龄最大者

SELECT MAX(age),emp.edid FROM emp GROUP BY emp.edid

# 统计每个部门里面最高工资

## 编写empsalary内连接查询

## 得到最高工资 max

## 部门分组 group by

SELECT MAX(salarystand),emp.edid FROM emp,salary WHERE emp.stid=salary.stid GROUP BY emp.edid

# 获取最高工资大于5000的部门

SELECT MAX(salarystand),emp.edid FROM emp,salary WHERE emp.stid=salary.stid   GROUP BY emp.edid HAVING MAX(salarystand)>5000

2. Mysql子查询

1、一个查询结果,作为另外一个查询条件


2、演示子查询

# 查询比“张无忌”的工资高

## 查询张无忌工资

## 查询工资大于张无忌工资值

SELECT * FROM emp,salary WHERE emp.stid=salary.stid AND salary.salarystand > (SELECT salary.salarystand FROM emp,salary WHERE emp.stid=salary.stid AND emp.ename='张无忌')

# 查询和张无忌是一个部门

## 查询张无忌部门id

## 哪个员工部门id和张无忌部门id相同 

SELECT * FROM emp WHERE emp.edid=(SELECT edid FROM emp WHERE ename='张无忌')

# 统计每个部门有多少个员工

SELECT dept.dname,es.num FROM dept,(SELECT COUNT(*) AS num,edid FROM emp GROUP BY edid) es WHERE dept.did=es.edid

3、exists子查询

SELECT * FROM t_department WHERE EXISTS (SELECT * FROM t_employee WHERE t_employee.dept_id = t_department.did);

4、复制子查询


(1)拷贝表结构

CREATE TABLE newadmin LIKE admin;

(2)拷贝表结构和数据(但约束与索引除外)

CREATE TABLE newadmin  AS   ( SELECT *  FROM admin  )  ;

(3)拷贝表结构+数据

CREATE TABLE newadmin LIKE admin;   INSERT INTO newadmin SELECT * FROM admin;

(4)跨数据库拷贝表

CREATE TABLE newadmin LIKE shop.admin; 

3. 单行函数

通过select直接使用,不需要依赖表


# mysql单行函数 SELECT POW(2,3) SELECT SQRT(4) SELECT LENGTH('atguigu') SELECT CURDATE() SELECT NOW() SELECT ename ,CASE WHEN age>=50 THEN '事业顶峰' WHEN age>=40 THEN '事业上升期' WHEN age>=30 THEN '事业奋斗期' ELSE '事业积累期' END FROM emp; SELECT DATABASE() SELECT VERSION() SELECT USER() SELECT PASSWORD("123") SELECT MD5('123456')

4. 事务

1、什么是事务

(1)事务是数据库操作最基本单元,在逻辑上一组操作,要么都成功,如果有一失败,所有都失败

(2)银行转账是典型例子


2、事务四个特性(ACID

(1)原子性: 有多个操作,要么都成功,如果有一个失败,所有都失败

(2)一致性:操作之前和之后总量不变的

(3)隔离性:并发操作中,多事务操作,多事务之间不互相影响的

(4)持久性:当事务操作完成之后,进行事务提交,数据库数据真正发生变化


3、在mysql进行事务操作

1)创建数据库引擎Innodb


2)操作步骤

第一步 开启事务

第二步 具体操作(添加、修改、删除)

第三步 提交/回滚

# 第一步 开启事务

START TRANSACTION;

# 第二步 执行具体事务操作

UPDATE emp SET ename='lucyatguigu' WHERE eid=1


# 第三步 提交/回滚事务

ROLLBACK; COMMIT;

 4、三个读问题(了解)


如果不考虑事务隔离性,并发操作中,会产生三个读问题

(1)脏读

* 有两个事务

* 一个未提交事务,读取到另外一个未提交事务操作数据


(2)不可重复读

* 一个未提交事务,读取到另外一个提交事务修改操作


(3)虚读(幻读)

* 一个未提交事务,读取到另外一个提交事务添加操作


** 只有事务提交(结束)之后,才可以看到其他数据

5. 权限与安全

创建用户,授予权限

GRANT SELECT,INSERT,UPDATE,DELETE ON *.* TO 'zhang3'@'%' IDENTIFIED BY '123';