第7步---MySQL的视图操作和

第7步---MySQL的视图操作

 

虚拟表。保存的只是视图的定义。不存放真实的数据,数据还是在原先的表中。

好处是方便和简化代码以及安全。

 1.视图创建

数据准备

-- 创建表的测试数据
create table dept(
	deptno int primary key,
  dname varchar(20),
	loc varchar(20)
);
insert into dept values(10, '教研部','北京'),
(20, '学工部','上海'),
(30, '销售部','广州'),
(40, '财务部','武汉');

create table emp(
	empno int primary key,
	ename varchar(20),
	job varchar(20),
	mgr int,
	hiredate date,
	sal numeric(8,2),
	comm numeric(8, 2),
	deptno int,
-- 	FOREIGN KEY (mgr) REFERENCES emp(empno),
	FOREIGN KEY (deptno) REFERENCES dept(deptno) ON DELETE SET NULL ON UPDATE CASCADE
);
insert into emp values
(1001, '甘宁', '文员', 1013, '2000-12-17', 8000.00, null, 20),
(1002, '黛绮丝', '销售员', 1006, '2001-02-20', 16000.00, 3000.00, 30),
(1003, '殷天正', '销售员', 1006, '2001-02-22', 12500.00, 5000.00, 30),
(1004, '刘备', '经理', 1009, '2001-4-02', 29750.00, null, 20),
(1005, '谢逊', '销售员', 1006, '2001-9-28', 12500.00, 14000.00, 30),
(1006, '关羽', '经理', 1009, '2001-05-01', 28500.00, null, 30),
(1007, '张飞', '经理', 1009, '2001-09-01', 24500.00, null, 10),
(1008, '诸葛亮', '分析师', 1004, '2007-04-19', 30000.00, null, 20),
(1009, '曾阿牛', '董事长', null, '2001-11-17', 50000.00, null, 10),
(1010, '韦一笑', '销售员', 1006, '2001-09-08', 15000.00, 0.00, 30),
(1011, '周泰', '文员', 1008, '2007-05-23', 11000.00, null, 20),
(1012, '程普', '文员', 1006, '2001-12-03', 9500.00, null, 30),
(1013, '庞统', '分析师', 1004, '2001-12-03', 30000.00, null, 20),
(1014, '黄盖', '文员', 1007, '2002-01-23', 13000.00, null, 10);

视图创建

-- 视图创建
 -- 创建或替换视图
CREATE OR REPLACE
 VIEW view_emp 
 AS 
 SELECT ename,job FROM emp;
 
 

视图查看

-- 查看视图
SHOW full TABLES;
-- 查询视图
SELECT * FROM view_emp;

 2.修改视图

-- 修改
ALTER VIEW view_emp 
AS
SELECT a.deptno,a.dname,a.loc ,b.ename ,b.sal FROM dept a,
emp b
WHERE a.deptno=b.deptno;


 其实视图表示的就是后面的连表查询的语句。

3.更新视图

可以对视图进行更新,更新的数据会同步到正式的表中

 

  • 聚合

  • 去重

  • 分组函数

  • having

  • union

  • 子查询

  • 常量值

  • 等等不能更新

 

-- ============更新
-- 创建测试的视图
CREATE OR REPLACE
 VIEW view_emp1
 AS 
 SELECT ename,job FROM emp;
 
 
 -- 更新视图数据
UPDATE view_emp1 SET ename  ='周瑜' WHERE ename='关羽';

-- 插入失败
INSERT INTO view_emp1 VALUES('张伞信息','文员');

视图中虽然可以更新数据,但是有很多的限制。一般情况下,最好将视图作为查询数据的虚拟表,而不要通过视图更新数据。因为,使用视图更新数据时,如果没有全面考虑在视图中更新数据的限制,就可能会造成数据更新失败。只作为视图数据查询和安全性的操作就行了不要进行别的操作

4.删除视图和重命名

删除的只是表的定义数据并没有丢失

 

-- 重命名
RENAME TABLE view_emp1 to ;


-- 删除视图
DROP VIEW IF EXISTS view_emp2;

5.视图总结

概念:虚拟表,逻辑结构

作用:原表数据变化视图中的数据也是发生变化的

c'x'l特点:简化sql,数据安全

操作:

  • 创建 create view 视图名 as 视图创建的语句

  • 查看 和查询正式表是一样的

  • 修改 alter view 视图名 as 子表

  • 更新 好多是不支持的

  • 重命名 rename table 旧名字 to 新的名字

  • 删除 drop view if exists 视图名字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简单点了

谢谢大佬

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值