0%

数据库表/视图/同义词的区别

在做需求的时候发现,正常来讲的话查询的是数据库的表,但是有时查询的可能又是视图,还有可能查询的是一个表的同义词;表/视图/同义词 他们有什么关联,为什么会有这么三种定义呢?

网络图片

数据库基表

数据库中的表,统一定义为基表,是常规定义的表;

在DATAGRIP中表,视图,同义词 分别对应了tables,views,synonyms;

DATAGRIP

视图

视图是一条存储起来的 SELECT 语句,是数据的显示方式,通过视图可以限制用户访问行、列、或更新表内容;

在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。

视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,就像这些来自于某个单一的表;

比如:创建视图的时候可以增加条件,甚至可以JOIN等;

1
2
3
4
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

视图的作用

视图一般是用来限制用户访问行、列、或更新表内容;起到隔离作用;

1 :限制行,列: 在创建视图的时候,就不返回要限制的列和行;

2 :限制更新: 视图不只能查询,不能做更新操作;

创建视图

创建视图语法

1
2
3
4
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

更新视图

更新视图: 创建并更新,覆盖原来的视图;

1
2
3
4
5
SQL CREATE OR REPLACE VIEW Syntax
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

删除视图

删除视图:SQL DROP VIEW Syntax

1
DROP VIEW view_name

同义词

同义词的作用

同义词使用场景是:两个独立的数据库用户,用户A想访问用户B数据库表的时候,就可以创建同义词,提供给A访问B的数据库,只限于查询的操作;

大概操作:

  • 1: B 用户授权A 用户;
  • 2: A 用户数据库创建 B 数据库的同义词;

使用同义词之前要确保用户拥有访问该对象的权限。

当公有对象(公有同义词)和本地对象具有相同的名称时,本地对象优先

公有同义词:DBA建立,所有用户共同拥有。CREATE PUBLIC SYNONYM …

私有同义词:用户建立,使用与该用户(对象,可被授权)。

1
2
CREATE OR REPLACE SYNONYM dept  FOR scott.dept;
SELECT * FROM dept;

区别

同义词和视图的区别在于:

同义词是提供给不同用户间范围的,只提供查询的功能,用户提供给不同用户之间范围;

视图是提供给同一个用户的范围内,只提供查询的功能,用户隔离操作;

GitHub登录不了?信任该网站之后再登录。