MySQL的视图

2021-07-14  本文已影响0人  _Cappuccino_

MySQL的视图

创建基础表
CREATE TABLE `stu` (
 `id` int(10) NOT NULL,
 `name` varchar(10) NOT NULL DEFAULT '',
 `age` int(10) unsigned zerofill DEFAULT NULL,
 `sex` char(5) NOT NULL DEFAULT '',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `score` (
 `id` int(10) NOT NULL,
 `sid` int(10) NOT NULL,
 `subject` varchar(10) NOT NULL DEFAULT '',
 `score` int(10) unsigned zerofill NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
视图的测试
创建单表试图
create view stu_info as select * from stu;
单表视图的增删改查(均可以正常执行)
INSERT into stu_info(id, name, age, sex) VALUES(6, 'haha', 20, 'man');
DELETE from stu_info WHERE id=6;
UPDATE stu_info set name='Mike1' where id=3;
SELECT name from stu_info;
如果当前视图只是在一个基本表上创建的,那么对于视图的增删改查会影响基本表的数据。

创建关联视图
CREATE VIEW stu_score as SELECT stu.name, score.subject, score.score from stu join score on score.sid=stu.id;
关联视图的查询:正常执行
SELECT * from stu_score where name='Tom';
关联视图的插入:拒绝执行:1393 - Can not modify more than one base table through a join view 'test.stu_score',
INSERT INTO stu_score(name, subject, score) VALUES('Wawa', 'test', 100);
关联视图的删除:拒绝执行:1395 - Can not delete from join view 'test.stu_score', Time: 0.001000s
DELETE from stu_score where name='Tom';
关联视图的更新:正常执行
UPDATE stu_score set score=100 where name='Tom';
如果视图是多个表联合创建的,那么对于视图的查询无影响;如果对视图进行添加,则会报错1393;如果对视图进行删除,则会报错1395;如果进行更新操作,则会正常执行。
视图的分类
作用
优点
缺点
视图与中间表的比较(暂时没有构造数据进行测试,有待考究)

源自:https://blog.csdn.net/meimei726322819/article/details/68923460/

数据库设计中,经常遇到一个决策:究竟是使用视图,还是中间表?

考虑库存管理的一个场景:最普通的单据是入库和出库单,库管员需要看到当前的库存。对库存的处理,我们有两个方案:一是使用视图,所有的入库减去所有的出库,就是当前库存;另外就是使用中间表,建立一个库存表,记录当前的库存。

上一篇 下一篇

猜你喜欢

热点阅读