同义词与别名(在ORACLE数据库中)|私有同义词和公共同义词
在英语中,同义词和别名的意思几乎相同。但在数据库中,这是两个不同的东西。特别是在ORACLE数据库中,两者的用法是不同的。同义词用于从另一个模式引用架构或数据库的对象。所以synonym是一个数据库对象类型。但别名的出现方式却不同。这意味着,它们不是数据库对象。别名用于引用查询中的表、视图和列。
同义词
这些是数据库对象的一种类型。它们引用数据库中的其他对象。同义词最常见的用法是,通过使用另一个名称来引用独立架构的对象。但是也可以创建同义词来引用另一个数据库的对象(在分布式数据库中,使用数据库链接)。表、视图、函数、过程、包、序列、物化视图、java类对象和触发器都可以用作同义词的引用。同义词有两种类型。
- 私有同义词(只能由创建它们的用户使用。)
- 公共同义词(可由具有适当权限的所有用户使用)
这里,是在单独的数据库中创建同义词的简单语法,
创建同义词myschema.mytable1对于[电子邮件保护]_link1
因为在myschema中,[email protected]\u link1(分布式数据库表)有一个同义词mytable1,所以我们可以使用mytable1轻松地引用分布式数据库表。我们不需要在任何地方都使用数据库链接的长对象名。
别名
这些只是查询中视图、表或列的另一个名称。它们不是数据库对象。因此,别名并非在架构/数据库中的任何地方都有效。它们只在查询内部有效。让我们看看这个例子,
选择tab1.col1作为c1,tab2.col2作为c2
从user1.tab1 tab1,user1.tab2 tab2
其中tab1.col1=tab2.col2
这里,c1和c2是列别名,用于tab1.col1和tab2.col2;tab1和tab2是表别名,用于user1.table1和user2.table2。所有这些别名仅在此查询内有效。
同义词和别名(在ORACLE数据库中)有什么区别?同义词是数据库对象类型。但是别名只是指查询中的表、视图或列的名称。不是数据库对象。同义词可以为表、视图、函数、过程、包、序列、物化视图、java类对象类型和触发器创建。但是别名只用于视图、表及其列。自从同义词是一个数据库对象,它们在模式(私有同义词)或数据库(公共同义词)内有效。但是别名在查询中有效用过。每个架构需要“create synonym”特权才能创建同义词。但是没有使用别名的特权。 |