① 语法
创建视图
create view 视图名 as select 语句;删除视图
drop view 视图名;② 示例
创建视图
create view myview as select ename, dname from emp inner join dept on emp.deptno=dept.deptno;
查询视图
select * from myview order by dname;
+--------+------------+
| ename | dname |
+--------+------------+
| CLARK | ACCOUNTING |
| KING | ACCOUNTING |
| MILLER | ACCOUNTING |
| SMITH | RESEARCH |③ 数据同步实验
修改视图
update myview set ename='TEST' where ename='CLARK';查询基表
select * from EMP where ename='CLARK';
select * from EMP where ename='TEST';修改基表
update EMP set deptno=10 where ename='JAMES'; -- 修改基表查询视图:视图中的数据也发生了变化
mysql> select * from myview where ename='JAMES';
+-------+----------+
| ename | dname |
+-------+----------+
| JAMES | RESEARCH | <== 视图中的数据也发生了变化
+-------+----------+练习:点击题目
目前为止我们使用 mysql 都是用的 root 账号,但是不建议直接使用 root 进行 mysql 的操作。
root 作为管理员可以对普通用户对应的权限进行设置和管理。如给张三和李四这样的普通用户权限设定后。就只能操作给你权限的库了

MySQL 有自己的用户管理机制,用户信息以表结构形式存储。这些信息保存在系统数据库 mysql 的 user 表中。
mysql> use mysql;
Database changed
mysql> select * from user \G;
*************************** 5. row ***************************
Host: localhost # 允许用户从哪台机器登录 MySQL,localhost 表示只允许从本地登录。
User: root # 用户名
# ....
authentication_string: *A..A # 用户密码
password_expired: N # 密码是否过期
password_last_changed: 2024-12-20 14:44:30 # 密码上次更改时间
password_lifetime: NULL查看用户信息:
mysql> select user, host, authentication_string from user;
+------------------+-----------+------------------------+
| user | host | authentication_string |
+------------------+-----------+------------------------+
| debian-sys-maint | localhost | $TA$0$7m4hSoOH7 |
| mysql.infoschema | localhost | $TA$0$TR3BRBEUD |
| mysql.session | localhost | $TA$0$TH2IEUSED |
| mysql.sys | localhost | $AT$0$TNE1VERBR |
| root | localhost | *TA9FF471C2C394 |
+------------------+-----------+------------------------+mysql 和 linux 一样可以允许创建多个用户,这些用户都是普通用户,你可以给他们开账号
所谓在 mysql 内部给用户开账号,就是把用户的用户名,允许从哪里登录,以及用户的密码信息放在 mysql 中的 user 表里。然后就有了这个用户了。
mysql 新建一个用户,有一个特点简单粗暴的方式,也不用后面学的专门的创建用户的sql语句
insert 向这个 user 里面插入也是可以的。但是这太麻烦了
其实下面说的创建用户,删除用户,修改用户其实说到底就是在 user 表里做 增删改
基本语法如下:
create user '用户名'@'登陆主机/ip' identified by '密码';localhost 或 127.0.0.1,远程登录用 % 表示任意主机。user 表中。create user 'home'@'localhost' identified by '123456'; # 创建用户
flush privileges; # 刷新权限确保用户信息生效
mysql> select user, host, authentication_string from user;
+------------------+-----------+------------------------+
| user | host | authentication_string |
+------------------+-----------+------------------------+
| debian-sys-maint | localhost | $TA$0$7m4hSoOH7 |
| home | localhost | $ktVMDQMHA$005$ |
| mysql.infoschema | localhost | $TA$0$TR3BRBEUD |
| mysql.session | localhost | $TA$0$TH2IEUSED |
| mysql.sys | localhost | $AT$0$TNE1VERBR |
| root | localhost | *TA9FF471C2C394 |
+------------------+-----------+------------------------+
-- 创建好用户之后,以后我们就可以用这个用户进行操作了但是如果是使用 Centos 进行操作创建用户可能会有问题,如下:

解决办法:
编辑 MySQL 配置文件:
通常配置文件位于 /etc/my.cnf 。打开配置文件并查找 [mysqld] 部分。
sudo vi /etc/my.cnf移除 skip-grant-tables 选项:

语法:
drop user '用户名'@'主机名';
-- 示例
drop user 'home'@'localhost';
drop user 'island'@'%';语法:
set password for '用户名'@'主机名' = password('新的密码'); # 用户自己修改密码
set password for '用户名'@'主机名' = password('新的密码'); # root 用户修改指定用户的密码【案例】:
mysql> set password for 'home'@'localhost' = password('123456');
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'password('123456')' at line 1
mysql> alter user 'home'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.01 sec)ERROR 1064 (42000): You have an error in your SQL syntax 错误是因为在 MySQL 8.0 及以上版本中,PASSWORD() 函数已经被弃用。你需要使用新的语法来设置用户密码
ALTER USER 语句来设置用户密码当我们在MySQL中把一个用户创建好了,不是就所有工作做好了,而是说把用户创建好了 ,用户还要有他对应的权限也要处理的。
MySQL数据库提供的权限列表:

当前新建的用户只能看到这 两个数据库,如下:

语法:
grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码'];
权限列表:多个权限用逗号分隔
grant select on ...
grant select, delete, create on ...
grant all [privileges] on ... -- 表示赋予该用户在该对象上的所有权限
库.对象名:指定数据库和对象(表、视图、存储过程等)
*.*:所有数据库的所有对象
库.*:某个数据库中的所有对象【案例】
mysql> show grants for 'home'@'localhost'; # 查看用户权限,授权前
+------------------------------------------+
| Grants for home@localhost |
+------------------------------------------+
| GRANT USAGE ON *.* TO `home`@`localhost` |
+------------------------------------------+
mysql> grant select, insert, update on learn1.* to 'home'@'localhost'; -- 授权
mysql> show grants for 'home'@'localhost'; # 查看用户权限,授权后
+------------------------------------------------------------------+
| Grants for home@localhost |
+------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `home`@`localhost` |
| GRANT SELECT, INSERT, UPDATE ON `learn1`.* TO `home`@`localhost` |
+------------------------------------------------------------------+
-- 切换到 home 主机,查看其库
mysql> show databases; # 授权前
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
+--------------------+
mysql> show databases; # 授权后
+--------------------+
| Database |
+--------------------+
| information_schema |
| learn1 |
| performance_schema |
+--------------------+语法:
revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';【案例】:
mysql> revoke all on learn1.* from 'home'@'localhost';
Query OK, 0 rows affected (0.01 sec)
-- 然后切换到 home 用户下
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
+--------------------+