-- 创建视图v_ename_dname,关联员工表和部门表
create view v_ename_dname as
select ename, dname
from emp, dept
where emp.deptno = dept.deptno;
1.2.2 查询视图
视图的查询语法和普通表完全一致,支持排序、筛选、聚合等所有 select 操作
sql复制代码
-- 基础查询
select * from v_ename_dname;
-- 带排序的查询
select * from v_ename_dname order by dname;
1.2.3 视图与基表的双向数据联动
这是视图最核心的特性,参考文档中重点强调了视图和基表的互相影响,我们通过案例完整演示。 ① 修改视图,影响基表
sql复制代码
-- 修改视图中的员工姓名
update v_ename_dname set ename='test' where ename='clark';
-- 查询基表,数据已被同步修改
select * from emp where ename='clark';
select * from emp where ename='test';
② 修改基表,影响视图
sql复制代码
-- 修改基表中员工的部门编号
update emp set deptno=10 where ename='james';
-- 查询视图,部门名称已同步更新
select * from v_ename_dname where ename='james';
1.2.4 删除视图
sql复制代码
drop view 视图名;
-- 示例:删除刚才创建的视图
drop view v_ename_dname;
1.3 视图的使用规则与限制
命名唯一性:视图名必须和库内其他视图、表名唯一,不能重名;
创建数量无限制:可以基于业务创建任意数量的视图,但要注意复杂嵌套查询的视图会严重影响性能;
索引与触发器限制:视图不能创建索引,也不能关联触发器、设置默认值;
权限要求:视图的使用需要对应的访问权限,创建视图必须有查询基表的权限;
排序覆盖规则:视图定义中可以使用 order by,但如果从该视图查询的 select 语句中也包含 order by,视图中的排序会被外部的排序覆盖;
-- 切换到mysql系统库
use mysql;
-- 查询核心用户信息
select host, user, authentication_string from user;
核心字段解释:
字段
核心含义
host
允许该用户登录的主机地址:localhost表示仅本机登录,%表示允许任意地址远程登录,也可以指定固定 IP
user
用户名
authentication_string
经过 password 函数加密后的用户密码,明文密码无法直接存储
xxx_priv
一系列权限字段,记录该用户拥有的全局权限
2.3 用户的核心操作(创建、删除、修改密码)
2.3.1 创建用户
基础语法
sql复制代码
create user '用户名'@'登陆主机/ip' identified by '密码';
实战案例:创建仅能本机登录的用户 Lotso,密码为 12345678
sql复制代码
create user 'Lotso'@'localhost' identified by '12345678';
创建完成后,再次查询 user 表,就能看到新增的用户信息。
✅️避坑提示:如果创建时出现ERROR 1819 (HY000): Your password does not satisfy the current policy requirements报错,是因为 MySQL 开启了密码强度校验。 ✅️ 解决方案:通过show variables like 'validate_password%';查看密码策略要求,设置符合复杂度的密码,或临时调整密码策略。
关于新增用户这里,需要大家注意,不要轻易添加一个可以从任意地方登陆的user。
select host,user, authentication_string from user; -- 可以用这个查看下,但是要先选择mysql这个库
2.3.2 删除用户
基础语法
sql复制代码
drop user '用户名'@'主机名';
错误示范
sql复制代码
-- 直接写用户名会报错,默认匹配%主机,和创建的localhost用户不匹配
drop user Lotso;
正确示范
sql复制代码
-- 必须和创建时的用户名+主机名完全匹配
drop user 'Lotso'@'localhost';
2.3.3 修改用户密码
① 用户自己修改自己的密码
sql复制代码
set password=password('新的密码');
② root 用户修改指定用户的密码(生产环境常用)
sql复制代码
set password for '用户名'@'主机名'=password('新的密码');
实战案例:修改 Lotso 用户的密码为 87654321
sql复制代码
set password for 'Lotso'@'localhost'=password('87654321');
2.4 MySQL 权限体系
权限列表我们按使用场景分类整理,方便大家按需分配:
权限分类
核心权限
适用范围
基础 DML 权限
select、insert、update、delete
表
结构操作权限
create、drop、alter、index
数据库 / 表
视图专属权限
create view、show view
视图
存储过程权限
create routine、alter routine、execute
存储过程 / 函数
管理类权限
create user、super、process、reload、shutdown
服务器全局
全权限
all [privileges]
对应范围的所有权限
权限粒度说明:
*.*:MySQL 实例中所有数据库的所有对象(表、视图、存储过程等)
库名.*:指定数据库中的所有对象
库名.表名:指定数据库中的指定表
2.5 权限的核心操作(授权、回收、查看)
2.5.1 给用户授权
刚创建的用户默认没有任何权限,只能登录 MySQL,无法查看任何业务库,必须手动授权。
基础语法
sql复制代码
grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码'];