Oracle_约束_表关系_多对多

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

▪ 错误报告:
▪ SQL 错误: ORA-01400: 无法将 NULL 插入 ("HR"."T4"."ID")
▪ 01400. 00000 - "cannot insert NULL into (%s)"
▪ *Cause:
▪ *Action:
将主键中写入重复的数据,将出现以下错误
▪ insert into t4(id,name) values(88,'jack') ▪ 错误报告: ▪ SQL 错误: ORA-00001: 违反唯一约束条件 (HR.T4_PK)
▪ SQL> create global temporary table t1(

id int primary key, --这儿的primary key指定了id为主键

name varchar(30)
▪ );
第二种,在create中单独一行
▪ create global temporary table t3(
表约束
表约束的目的:确保表中数据的完整性
常用的约束类型:
▪ 主键约束(PRIMARY KEY):要求主键列数据唯一,并且不允许为 空
▪ 非空约束(NOT NULL):指定的列的值不允许为空 ▪ 唯一键约束(UNIQUE):要求该列唯一,允许为空,但只能出现一
个空值
▪ 检查约束(CHECK):指定表中一列或多列可以接受的数据值格式 ▪ 默认约束(DEFAULT):指定某列的默认值 ▪ 外键约束(FOREIGN KEY):用于建立和加强两个表数据之间连接
Unique创建的约束列上,不可以存在相同的值。但可以保存两个null.
▪ create global temporary table t5(
▪ id int unique,
▪ name varchar(30)
▪ );
▪ 向唯一约束中写入两个相同的值:
▪ SQL 错误: ORA-00001: 违反唯一约束条件 (HR.SYS_C007008)
see

this message if a duplicate entry exists at a different level.
▪ *Action: Either remove the unique restriction or do not insert the key.
删除/启用/禁用唯一约束
范围
▪ 性别可选择“男”、“女”、“未知”
是否允许重复
▪ 银行卡号不允许重复
特定业务要求
▪ 银行贷款
数据完整性-1
实体完整性 域完整性 引用完整性 自定义完整性
数据完整性-2
实体完整性
实体完整性
▪ 实体完整性要求每一个表中的主键字段都不能为空或者重复的值 。
实现方法
▪ 唯一约束 ▪ 主键约束
数据完整性(Data Integrity)是指数据的精确性(Accuracy) 和可靠性(Reliability)。
▪ 它是应防止数据库中存在不符合语义规定的数据和防止因错误信 息的输入输出造成无效操作或错误信息而提出的。
数据类型
▪ 年龄使用什么类型?
格式是否正确
▪ 身份证号,可以是15位也可以是18位
);
可以通过以下两个系统视图,查询约束信息: user_constraints -- 表上的约束 User_cons_columns –列上的约束
主键约束:
向主键字段写入一个null值,将会出现以下错误:
▪ 在行 23 上开始执行命令时出错:
▪ insert into t4(id,name) values(null,'jack')
--创建唯一约束 create table t2( id int, age int, constraint t2_uq unique(id) ); --写入记录 insert into t2 values(1,1); select * from t2; --删除唯一约束 alter table t2 drop constraint t2_uq; --添加唯一约束,如果存在重复的记录则添加不成功 alter table t2 add constraint t2_uq2 unique(id); --删除重复的数据 delete from t2 where rownum=1; --禁用唯一约束 alter table t2 disable constraint t2_uq2; --启用唯一约束 alter table t2 enable constraint t2_uq2;
数据库操作与管理语言 Oracle SQL
表的约束
数据完整性
▪ 主键、外键、非空、默认 ▪ Check
添加、删除约束
▪ 启用、禁用约束
表关系与主外键约束及关联查询
▪ 一对一 ▪ 一对多 ▪ 多对多
本章目标
数据完整性
存储在数据库中的所有数据值均正确的状态。
▪ 如果数据库中存储有不正确的数据值,则该数据库称为已失去数 据完整性。
ALTER TABLE order_status2 ADD CONSTRAINT order_status2_status_uq UNIQUE (status);
▪ 在往order_status2表中添加任意行时,行的status列的值必须要 唯一。
唯一键约束:
Unique是唯一约束,也可称为候选键
域完整性
域完整性
▪ 域完整性指列的值域的完整性。如数据类型、格式、值域范围、 是否允许空值等
实现方法
▪ 限制数据类型 ▪ 外键约束 ▪ 默认值 ▪ 非空约束
引用完整性
引用完整性
▪ 也称之为参照完整性,当更新、删除、插入一个表中的数据时, 通过参照引用相互关联的另一个表中的数据,来检查对表的数据 操作是否正确。

this message if a duplicate entry exists at a different level.
▪ *Action: Either remove the unique restriction or do not insert the key.
删除主键约束:
--创建带有主键的列 create table t1( id int not null, nm varchar(30), constraint t1_pk primary key(id) ); --删除主键 alter table t1 drop constraint t1_pk; --添加多行数据 insert into t1 values(1,1); select * from t1; --必须先将重复的数据删除以后才可以添加主键,默认只留下一行 delete from t1 where rownum=1; --然后再添加主键 alter table t1 add constraint t1_pk2 primary key(id);

可以使用系统的sys_guid作主键的值。 可以使用自动增长的integer列做为主键的值。
主键约束的特点:
唯一、不可重复。 非空NULL。 其他特点
▪ 用户不关心。 ▪ 对用户没有任何意义。但对程序开发人员,意义重大。
创建主键约束的语法:
有三种:
第一种,在创建表时,直接指定主键
▪ 引用完整性要求关系中不允许引用不存在的实体。 ▪ 引用完整性与实体完整性是关系模型必须满足的完整性约束条件

实现方法
▪ 外键约束
自定义完整性
自定义完整性
▪ 用户自定义完整性指针对某一具体关系数据库的约束条件,它反 映某一具体应用所涉及的数据必须满足的语义要求。
实现方法
▪ 存储过程 ▪ 触发器
的一列或多列。 通过将表中的主键列添加到另一个表中。可以创 建两个表之间的连接。这个主键的列就称为第二个表的外键。外 键约束就可以确保添加到外键表中的任何行都在主表中都存在相 应的行
主键:
选择主键的原则
▪ 最少性
✓ 尽量选择单个键作为主键 ✓ 必须保证唯一。
▪ 稳定性
✓ 尽量选择数值更新少的列作为主键 ✓ 一般选择没有意义,且用户不关心,但程序员关心的列做为表的主键
▪ id int,
▪ name varchar(30),
▪ --单独一行创建主键。此时必须要指定主键的名称。
▪ constraint t3_pk primary key(id)
▪ );
第三种,通过修改表创建主键
▪ --通过修改表,创建主键
▪ create global temporary table t4(
▪ id int,
▪ name varchar(30)
▪ );
▪ --修改表,添加主键
▪ alter table t4
▪ add constraint t4_pk primary key(id);
案例:
创建主键:
CREATE TABLE order_status2 ( id INTEGER CONSTRAINT order_status2_pk PRIMARY KEY, status VARCHAR2(10), last_modified DATE DEFAULT SYSDATE
非空约束
非空约束
▪ 给status列添加非空约束
ALTER TABLE order_status2 MODIFY status CONSTRAINT order_status2_status_nn NOT
NULL;
▪ 给modified_byLeabharlann Baidu添加非空约束
ALTER TABLE order_status2 MODIFY modified_by CONSTRAINT
禁用和启动主键约束:
--禁用约束 alter table t1 disable constraint t1_pk2; --启动主键约束 alter table t1 enable constraint t1_pk2;
唯一约束
以下ALTER TABLE语句给order_status2表的status列添 加UNIQUE约束
▪ 00001. 00000 - "unique constraint (%s.%s) violated"
▪ *Cause: An UPDATE or INSERT statement attempted to insert a duplicate key.

For Trusted Oracle configured in DBMS MAC mode, you may see
非空约束:
删除/添加/启用/禁用非空约束:
--以下是非空约束 create table t3( id int not null, age int ); --查询非空约束 select * from user_constraints where table_name='T3'; --写入空值 ,出错 insert into t3 values(null,33); delete from t3; --删除非空约束 alter table t3 drop constraint SYS_C007024; --添加非空约束 alter table t3 modify id not null; --禁用 alter table t3 disable constraint SYS_C007025; --启动 alter table t3 enable constraint SYS_C007025;
▪ 00001. 00000 - "unique constraint (%s.%s) violated"
▪ *Cause: An UPDATE or INSERT statement attempted to insert a duplicate key.

For Trusted Oracle configured in DBMS MAC mode, you may
order_status2_modified_by_nn NOT NULL;
▪ 给last_modified列添加非空约束,不指定约束名
ALTER TABLE order_status2 MODIFY last_modified NOT NULL;
--以下创建一个非空约束 create global temporary table t8( id int not null, nm varchar(30) ); insert into t8 values(null,'ddd'); --外部添加 create global temporary table t9( id int, age int ); --修改为非空约束 alter table t9 modify id not null; insert into t9 values(null,33);
相关文档
最新文档