Oracle基础知识之同义词、数据库链接、数据完整性

  • 一.同义词
    • (一)概念
    • (二)分类
      • 1.私有同义词
      • 2.公共同义词
      • 3.远程同义词
    • (三)作用
  • 二.数据库链接
    • (一)概念
    • (二)分类
      • 1.私有数据库链接
      • 2.公共数据库链接
    • (三)作用
  • 三.数据完整性
    • (一)概念
    • (二)类型
  • 四.约束类型
    • PRIMARY KEY(主键约束)
    • UNIQUE(唯一约束)
    • CHECK(条件约束)
    • FOREIGN KEY(外键约束)

一.同义词

(一)概念

Oracle数据库中提供了同义词管理的功能。同义词是数据库方案对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。在使用同义词时,Oracle数据库将它翻译成对应方案对象的名字。与视图类似,同义词并不占用实际存储空间,只有在数据字典中保存了同义词的定义。在Oracle数据库中的大部分数据库对象,如表、视图、同义词、序列、存储过程、包等等,数据库管理员都可以根据实际情况为他们定义同义词。(本篇主要讲对表的操作)

(二)分类

1.私有同义词

  • 概念

它与公共同义词所对应,是由创建它的用户所拥有。当然,这个同义词的创建者,可以通过授权控制其他用户是否有权使用属于自己的私有同义词。

  • 创建
create synonym 同义词名称
for 方案名.表名;//方案名即我们所说的用户名

注:用户在自己的模式下创建私有同义词,这个用户必须拥有create synonym权限,否则不能创建私有同义词。

  • 使用
select * from 同义词名;
  • 删除
drop synonym 同义词名;

2.公共同义词

  • 概念

由一个特殊的用户组Public所拥有。顾名思义,数据库中所有的用户都可以使用公共同义词。公共同义词往往用来标示一些比较普通的数据库对象,这些对象往往大家都需要引用。

  • 创建
create public synonym 同义词名
for 方案名.表名;
  • 使用
select * from 同义词名;
  • 删除
drop public synonym 同义词名;

3.远程同义词

由于远程同义词要和数据库链接一起使用,所以在此不详细讲述。只需要了解其语法格式即可。

create [public] synonym 同义词名
for school_class@mydb_link;//school_class@mydb_link是创建数据库链接时的表名.链接名

(三)作用

  1. 多用户协同开发中,可以屏蔽对象的名字及其持有者。如果没有同义词,当操作其他用户的表时,必须通过用户名.表名的形式,采用了Oracle同义词之后就可以隐蔽掉用户名。
  2. 为用户简化sql语句。如果自己建的表的名字很长,可以为这个表创建一个Oracle同义词来简化sql开发。
  3. 为分布式数据库的远程对象提供位置透明性。

二.数据库链接

(一)概念

database link是定义一个数据库到另一个数据库的路径的对象,database link允许你查询远程表及执行远程程序。在任何分布式环境里,database都是必要的。另外要注意的是database link是单向的连接。

(二)分类

1.私有数据库链接

只有创建者用户才可以使用。

  • 创建
create database link 链接名
connect to 用户名 identified by 口令  //用户名是指创建链接的用户,口令即用户所对应的口令
using 链接字符串;  //链接字符串指的是被链接的数据库服务名

创建数据库链接分为两种:在同一服务器和不同服务器。如果要链接的数据库和本数据库在同一个服务器,则链接字符串直接写数据库名;若不在同一个服务器,则链接字符串为
’(DESCRIPTION = (ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))'
这个服务名保存在tnsnames.ora文件中,在该文件中定义了协议、主机名、端口和数据库名。

  • 使用
select * from 表名@数据库链接名;

私有数据库链接只能创建的用户使用,同一数据库不同用户也不能使用。

  • 删除
drop database link 链接名;

在哪创建在哪删除。 在删除时,若之前使用了数据库链接查询,则必须关掉查询结果。公共数据库链接也一样。

2.公共数据库链接

所有的用户均可使用。

  • 创建
create public database link 链接名
connect to 用户名 identified by 口令  //用户名是指创建链接的用户,口令即用户所对应的口令
using 链接字符串;  //链接字符串指的是被链接的数据库服务名
  • 使用
select * from 表名@数据库链接名;

所有用户均可使用。

  • 删除
drop public database link 链接名;

(三)作用

可以实现跨数据库使用。

三.数据完整性

(一)概念

数据完整性(Data Integrity)是指数据的精确性(Accuracy) 和可靠性(Reliability)。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。

(二)类型

  • 实体完整性(Entity Integrity)

是指保证表中所有的行唯一。实体完整性要求表中的所有行都有一个唯一标识符。这个唯一标识符可能是一列,也可能是几列的组合,称为主键。也就是说,表中的主键在所有行上必须取唯一值。如:student表中sno(学号)的取值必须唯一,它唯一标识了相应记录所代表的学生,学号重复是非法的。学生的姓名不能作为主键,因为完全可能存在两个学生同名同姓的情况。

  • 域完整性(Domain Integrity)

是指一个列的输入有效性,是否允许为空值。如:学生的考试成绩必须在0~100之间,性别只能是“男”或“女”。

  • 参照完整性(Referential Integrity)

是指保证主关键字(被引用表)和外部关键字(引用表)之间的参照关系。它涉及两个或两个以上表数据的一致性维护。外键值将引用表中包含此外键的记录和被引用表中主键与外键相匹配的记录关联起来。在输入、更改或删除记录时,参照完整性保持表之间已定义的关系,确保键值在所有表中一致。这样的一致性要求确保不会引用不存在的值,如果键值更改了,那么在整个数据库中,对该键值的所有引用要进行一致的更改。参照完整性是基于外键与主键之间的关系。例如学生学习课程的课程号必须是有效的课程号,score表(成绩表)的外键cno(课程号)将参考course表(课程表)中主键cno(课程号)以实现数据完整性。

  • 4.用户自定义完整性(User-definedIntegrity)

域完整性、实体完整性及参照完整性分别在列、行、表上实施。数据完整性任何时候都可以实施,但对已有数据的表实施数据完整性时,系统要先检查表中的数据是否满足所实施的完整性,只有表中的数据满足了所实施的完整性,数据完整性才能实施成功。

数据完整性这么重要,那么如何维护呢?下面就说说如何用约束条件去实现数据完整性
完整性与约束的关系如下表:

完整性类型 约束类型 描述
实体完整性 primary key(主键约束) 每一行的唯一标识符,不允许空值,确保自动创建唯一聚集索引
域完整性 not null(非空约束) 一般主键需要设置成非空约束
实体完整性 unique(唯一约束) 防止冗余值,允许空值,确保自动创建唯一非聚集索引
域完整性 check(条件约束) 指定某个列中的可保存值的范围
引用(参照)完整性 foreign key(外键约束) 定义一列或几列,其值与本表或另一个表的主键值相匹配
域完整性 default(默认值) 使用INSERT插入数据时,若未指定某个列的取值,则将默认值插入

四.约束类型

PRIMARY KEY(主键约束)

  • 创建
    创建主键的方法有很多,可以在创建表时,也可以在创建表之后。
//创建表时添加主键约束
create table school_students
(
stu_id nvarchar2(20) not null, //添加约束条件也可以在字段的后面直接添加,不过不建议这样做
stu_name nvarchar2(20) not null,
stu_sex nvarchar2(20) not null,
stu_class_id nvarchar2(20),
constraint pk_sch_stu_id primary key(stu_id)  //约束名称命名规则:约束名+表名+字段名,这样我们之后使用时更方便,也不易混淆
);
//创建表之后添加约束条件
alter table 表名
add constraint 键值 primary key(字段名);//这里的键值指的是约束名称
  • 删除
alter table 表名
drop constraint 约束名称;
  • 每个表最多只能有一个主键约束
  • 主键列的值(或其多列的组合)是唯一的,且不允许空值
  • 主键约束在指定列上创建了一个唯一索引,默认是聚集索引,也可以是非聚集的,可以指定主键对应的索引为非聚集索引
  • 可以在定义主键时添加级联操作

UNIQUE(唯一约束)

  • 创建
//创建表时添加唯一约束
create table school_class
(
class_id nvarchar2(20) not null,
class_name nvarchar2(20) not null,
constraint pk_sch_class_id primary key(class_id),
constraint pk_sch_class_name unique(class_name)
);
//创建表之后添加约束条件
alter table 表名
add constraint 键值 unique(字段名);
  • 删除
alter table 表名
drop constraint 约束名称;
  • 一个表可有多个UNIQUE约束
  • UNIQUE可出现在多列中,这些列的组合值必须唯一,但是UNIQUE所在列并不是主键列
  • UNIQUE默认创建唯一性非聚集索引,但是也可以指定创建的索引为聚集索引

CHECK(条件约束)

  • 创建
//创建表时添加约束
create table school_students
(
stu_id nvarchar2(20) not null,
stu_name nvarchar2(20) not null,
stu_sex nvarchar2(20) not null,
stu_credits number(2) default 0,
stu_class_id nvarchar2(20) not null,
constraint pk_school_students_stu_id primary key(stu_id),//添加主键约束
constraint ck_school_students_stu_sex check(stu_sex in('男','女')),//添加条件约束,使得添加记录时,性别只能是男或女
constraint ck_school_students_stu_credits check(stu_credits>=0 and stu_credits<=12)//添加条件约束,使得添加记录时,分数只能在0-12之间
);
//创建表之后添加
  • 删除
alter table 表名
drop constraint 约束名称;
  • 一个列上可以有多个CHECK约束,CHECK约束不能包含子查询语句
  • 执行INSERT、UPDATE语句时将会验证该列的CHECK约束,防止发生错误,执行DELETE语句时不检查CHECK约束

FOREIGN KEY(外键约束)

外键约束定义一个或多个列,这些列可以引用当前或其它表的主键列/UNIQUE约束列,通过外键约束可以实现表和表之间的依赖关系。

  • 创建
//创建表时添加唯一约束
create table school_students
(
stu_id nvarchar2(20) not null,
stu_name nvarchar2(20) not null,
stu_sex nvarchar2(20) default '男',
stu_credits number(2) default 0,
stu_class_id nvarchar2(20) not null,
constraint pk_school_students_stu_id primary key(stu_id),
constraint fk_school_students_stu_class_id foreign key(stu_class_id) references school_class(class_id)
[on delete {cascade|set null]  //on delete cascade 表示在主表删除列时,从表的列也会随之删除,on delete set null 表示在主表删除列时,从表的列会置为空,如果不加上,默认时主表无法删除,必须将外键约束删除之后主表才可以删除列
);
//创建表之后在新建列时添加约束条件
alter table school_students
add stu_class_name nvarchar2(20) constraint fk_school_students_stu_class_name references school_class(class_name) [on delete {cascade|set null];
//创建表之后在表中原有的列上添加约束条件
alter table school_students
add constraint fk_school_students_stu_class_id foreign key(stu_class_id) references school_class(class_id) [on delete {cascade|set null];

注意,Oracle中没有ON DELETE NO ACTION,ON DELETE SET DEFAULT,
ON UPDATE NO ACTION,ON UPDATE CASCADE,ON UPDATE SET NULL,ON UPDATE SET DEFAULT

  • 删除
alter table 表名
drop constraint 约束名称;
  • 要先在主表中插入数据,才能在从表中插入数据,且插入从表列的数据要么和主表相等,要么为NULL
  • 当我们更新主表时,从表所对应的列值也会随着更新

我们添加外键约束时应注意:

  • 添加约束时,所参照的字段必须是主键或唯一键
  • 不能把主表中没有的属性定义在从表的外键中
  • 如果表中有数据,且定义外键约束的字段含有被参照表字段以外的值,则无法添加约束

我们在插入数据时应注意:

  • A表(从表)的外键关联的为B表(主表)中的字段,则应该A有数据则B必有数据,B为空则A必为空。

Oracle基础知识之synonym(同义词)、database link(数据库链接)、数据完整性相关推荐

  1. Oracle 基础知识——客户端连接oracle数据库服务端的四种方法

    Oracle基础知识 Oracle Database 11g 快捷版 (Oracle Database XE) 是一款基于 Oracle Database 11g 第 2 版代码库的小型入门级数据库, ...

  2. 【oracle】oracle经典sql,exception,database link纠错

    [oracle]oracle经典sql,exception,database link纠错 1111-01 oracle经典sql,exception,database link纠错 1.给表tabl ...

  3. oracle:oracle基础知识(一)

    oracle基础知识(一) oracle基础入门学习笔记:视频链接 文章目录 数据库登录角色及表结构 表空间 创建表空间 认识表 管理表 列的增,删.改 表的重命名 删表 向表中插入数值 复制表 表中 ...

  4. oracle:oracle基础知识(二)

    oracle基础知识(二)笔记:高级查询 文章目录 分组查询 多属性分组语法: 过滤查询 group by 语句增强 sqlplus报表功能 多表查询 等值连接 外连接 自连接 子查询 子查询中的空值 ...

  5. oracle基础知识文档,Oracle 基础知识分享PPT

    因测试组需求,所以把Oracle基础知识整理成了PPT,并讲解了一下(PPT无风格,简约派吐舌头). Oracle 是以高级结构化查询语言(SQL)为基础的大型关系数据库,通俗地讲它是用方便逻辑管理的 ...

  6. Oracle_高级功能(3) synonym和database link

    一.同义词synonym connect sys/123 as sysdba; select * from emp; ORA-00942: 表或视图不存在 create synonym emp for ...

  7. oracle基础知识过一遍(原创)

    用户.角色.权限.表空间 create tablespace test1_tablespace datafile 'test1file.dbf' size 10m; create temporary  ...

  8. Oracle基础知识总结

    ORACLE 基础 ORACLE 数据库具有以下特点: 支持多用户.大事务量的事务处理 数据安全性和完整性控制 支持分布式数据处理 可移植性 ORACLE 体系结构 数据库 实例 数据文件(dbf) ...

  9. oracle创建public链接,如何在oracle直接使用地址来创建database link

    在2个oracle之间手工同步数据时,DBlink是最快捷的手段之一吧.建dblink的时候需要知道待读取数据库的ip地址,ssid以及数据库用户名和密码. 前提: 创建dblink的用户有对应的数据 ...

最新文章

  1. JS中URL编码参数(UrlEncode)
  2. linux网卡驱动离线安装_新装Linux系统没有网卡驱动的解决办法和步骤
  3. ios command
  4. Hash Table Benchmarks
  5. Duilib学习笔记《03》— 控件使用
  6. linux显示中文乱码
  7. [vue] 有使用过vue吗?说说你对vue的理解
  8. mybatis那些事~
  9. “常程跳槽小米”裁决出炉:常程继续履行竞业限制,还要赔500多万...
  10. linux先安装svn server
  11. java 跟 咖啡的关系
  12. paip.提高用户体验----增添开始菜单类似360小助手按钮总结 (补充c925)
  13. SAP中通过历史记录查询追溯BOM工程变更处理物料升级未生效问题实例
  14. 通道抠图蒙版置入背景(抠图换背景)
  15. Console口和Telnet远程登陆
  16. 手把手教学 玩转苹果HomeKit
  17. 邪恶的PLS-00103错误提示
  18. mac外接显示器 竖屏 黑苹果_mac外接显示器 竖屏 黑苹果_Mac 外接显示器转自定义HiDPI分辨率教程...
  19. 单片机应用编程技巧100问
  20. Java中无穷大、无穷小、非数、最大值、最小值

热门文章

  1. Superfetch Prefetch
  2. PHP+MySQL动态网站开发 从基础到实践pdf
  3. 云计算疑难杂症解决方案一
  4. 【8028】产品规划七宗罪
  5. 栈溢出 栈内存溢出_全栈溢出开发人员
  6. 手机同声翻译软件哪个好?试试这款不错的同声互译软件
  7. MySQL优化系列15-优化Innodb表
  8. Java数组练习--数组随机赋值
  9. .Net·VS·三板斧解决断点无法命中的多种情况
  10. Linux内核同步机制之(一):原子操作