MySQL视图作为虚拟表能简化复杂查询并提升数据安全,而完善的用户权限管理则是数据库安全的重要保障。
视图实际上是一个动态查询结果的虚拟表,其数据来源于基础表的实时查询结果。
核心特性:数据双向同步机制
主要作用:
1:创建员工表
-- 创建部门表
CREATE TABLE DEPT (
deptno INT PRIMARY KEY,
dname VARCHAR(20),
loc VARCHAR(20)
);
-- 创建员工表
CREATE TABLE EMP (
empno INT PRIMARY KEY,
ename VARCHAR(20),
job VARCHAR(20),
mgr INT,
hiredate DATE,
sal DECIMAL(7,2),
comm DECIMAL(7,2),
deptno INT,
FOREIGN KEY (deptno) REFERENCES DEPT(deptno)
);
-- 插入测试数据
INSERT INTO DEPT VALUES
(10, 'ACCOUNTING', 'NEW YORK'),
(20, 'RESEARCH', 'DALLAS'),
(30, 'SALES', 'CHICAGO'),
(40, 'OPERATIONS', 'BOSTON');
INSERT INTO EMP VALUES
(7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, NULL, 20),
(7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30),
(7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30),
(7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, NULL, 20),
(7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30),
(7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, NULL, 30),
(7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, NULL, 10),
(7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, NULL, 20),
(7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000, NULL, 10),
(7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500, 0, 30),
(7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100, NULL, 20),
(7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, NULL, 30),
(7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, NULL, 20),
(7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, NULL, 10);
2:创建视图并查询
-- 创建视图 CREATE VIEW v_ename_dname AS SELECT e.ename, d.dname FROM EMP e JOIN DEPT d ON e.deptno = d.deptno; -- 查询视图(和查询普通表语法完全一致) SELECT * FROM v_ename_dname ORDER BY dname;

视图实际上存储的是SQL查询语句,每次访问都会重新执行查询。
3:修改视图数据,验证对基表的影响
-- 先查看基表中CLARK的信息 SELECT ename FROM EMP WHERE ename = 'CLARK'; -- 结果:CLARK -- 修改视图中的数据 UPDATE v_ename_dname SET ename = 'TEST' WHERE ename = 'CLARK'; -- 再次查看基表 SELECT ename FROM EMP WHERE ename = 'CLARK'; -- 无结果 SELECT ename FROM EMP WHERE ename = 'TEST'; -- 结果:TEST

通过视图修改数据会直接影响底层基表。
4:修改基表数据,验证对视图的影响
-- 修改基表中JAMES的部门编号 UPDATE EMP SET deptno = 10 WHERE ename = 'JAMES'; -- 查询视图中JAMES的部门 SELECT * FROM v_ename_dname WHERE ename = 'JAMES';

基表数据变更会立即反映在视图查询结果中。
5:删除视图
-- 删除视图 DROP VIEW v_ename_dname; -- 验证删除 SHOW TABLES; -- 视图不再出现在列表中

用户账户信息存储在mysql数据库的user表中,主要字段包括:
| 字段 | 含义 |
|---|---|
host |
允许登录的主机地址 |
user |
用户名 |
authentication_string |
加密后的密码 |
*_priv |
各类权限标识 |