系统表是MogDB存放结构元数据的地方,它是MogDB数据库系统运行控制信息的来源,是数据库系统的核心组成部分。
系统视图提供了查询系统表和访问数据库内部状态的方法。
系统表和系统视图要么只对管理员可见,要么对所有用户可见。下面的系统表和视图有些标识了需要管理员权限,这些系统表和视图只有管理员可以查询。
用户可以删除后重新创建这些表、增加列、插入和更新数值,但是用户修改系统表会导致系统信息的不一致,从而导致系统控制紊乱。正常情况下不应该由用户手工修改系统表或系统视图,或者手工重命名系统表或系统视图所在的模式,而是由SQL语句关联的系统表操作自动维护系统表信息。
须知: 用户应该禁止对系统表进行增删改等操作,人为对系统表的修改或破坏可能会导致系统各种异常情况甚至MogDB不可用。
支持updatable-views
视图可更新指的是用户可以通过视图对视图对应的基表进行INSERT/UPDATE/DELETE操作来更新基表的数据。
为了使视图可更新,视图中的行与基表中的数据行必须要有一一对应的关系,具体来说,视图中存在以下内容的时候,则该视图不可更新:
- 聚合函数或者窗口函数,比如sum、count、min、max、avg等
- DISTINCT语句
- HAVING、GROUP BY、START WITH、CONNECT BY
- UNION、UNION ALL、INTERSECT、EXCEPT
- 选择列中有子查询
- FROM子句中有不可更新的视图
- WHERE子句中的字子查询引用了FROM子句中的表
- 视图定义中的列由函数或者表达式产生,例如
decode(...)
- 对于JOIN视图
- 多表连接的视图做DML的时候必须存在不少于1张带有唯一键或者主键的基表
- 多表连接的视图上的任何INSERT、UPDATE或DELETE操作一次只能修改一个基表
示例
INSERT VIEW
CREATE TABLE IF NOT EXISTS table1(id int, a char(6), b varchar(6), c varchar(6));
INSERT INTO table1 VALUES(1, reverse('123A78'), '123A78', '1sdfBB');
INSERT INTO table1 VALUES(2, reverse('E3gw78'), 'E3g78', 'lkoier');
INSERT INTO table1 VALUES(3, reverse('HHiiw6'), 'Hiw6', '23fdsg');
CREATE VIEW test_view AS SELECT * FROM table1 WHERE id > 1;
INSERT INTO test_view VALUES(4, '2sdafd', '23ata', 'dstsee');
SELECT * FROM table1 WHERE id = 4;
id | a | b | c
----+--------+-------+--------
4 | 2sdafd | 23ata | dstsee
(1 row)
DROP VIEW IF EXISTS test_view;
DROP TABLE IF EXISTS table1;
复制
UPDATE VIEW
CREATE TABLE IF NOT EXISTS table1(id int, a char(6), b varchar(6), c varchar(6));
INSERT INTO table1 VALUES(1, reverse('123A78'), '123A78', '1sdfBB');
INSERT INTO table1 VALUES(2, reverse('E3gw78'), 'E3g78', 'lkoier');
INSERT INTO table1 VALUES(3, reverse('HHiiw6'), 'Hiw6', '23fdsg');
CREATE VIEW test_view AS SELECT * FROM table1 WHERE id > 1;
UPDATE test_view SET a = '2222' WHERE id = 2;
SELECT * FROM table1;
id | a | b | c
----+--------+--------+--------
1 | 87A321 | 123A78 | 1sdfBB
3 | 6wiiHH | Hiw6 | 23fdsg
2 | 2222 | E3g78 | lkoier
(3 rows)
DROP VIEW IF EXISTS test_view;
DROP TABLE IF EXISTS table1;
复制
DELETE VIEW
CREATE TABLE IF NOT EXISTS table1(id int, a char(6), b varchar(6), c varchar(6));
INSERT INTO table1 VALUES(1, reverse('123A78'), '123A78', '1sdfBB');
INSERT INTO table1 VALUES(2, reverse('E3gw78'), 'E3g78', 'lkoier');
INSERT INTO table1 VALUES(3, reverse('HHiiw6'), 'Hiw6', '23fdsg');
CREATE VIEW test_view AS SELECT * FROM table1 WHERE id > 1;
DELETE FROM test_view WHERE id = 2;
SELECT * FROM table1 WHERE id > 1;
id | a | b | c
----+--------+------+--------
3 | 6wiiHH | Hiw6 | 23fdsg
(1 row)
DROP VIEW IF EXISTS test_view;
DROP TABLE IF EXISTS table1;
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
TA的专栏
热门文章
我的故障分析及处理思路分享(李真旭)
2020-10-22 11099浏览
公共子表达式消除(Common Subexpression elimination,CSE)
2020-08-26 6199浏览
Oracle数据库的跟踪和分析方法
2020-10-02 5054浏览
2.5.9使用systemd管理MySQL服务器
2020-10-20 4532浏览
初探华为云GaussDB (for MySQL)
2020-12-11 3863浏览
最新文章
28.4.4 INFORMATION_SCHEMA INNODB_BUFFER_POOL_STATS 表
2024-09-29 104浏览
28.4.3 INFORMATION_SCHEMA INNODB_BUFFER_PAGE_LRU 表
2024-09-29 64浏览
28.4.2 INFORMATION_SCHEMA INNODB_BUFFER_PAGE 表
2024-09-29 63浏览
28.4.1 INFORMATION_SCHEMA InnoDB 表参考
2024-09-29 66浏览
28.3.50 INFORMATION_SCHEMA VIEW_TABLE_USAGE 表
2024-09-29 69浏览
目录