约束

一、数据库对象
  • 表:表是用来存放用户数据的对象,由行和列组成,列就是字段,行就是表中的记录。
  • 约束:保证数据完整性的约束,设置在单个字段或者多个最短的组合上,写入这些字段的数据必须符合约束的限制。
  • 视图:是一个命名的查询,用于改变基表的数据显示,通过视图能够简化查询,访问方式与表相同。
  • 索引:构建于表的单字段或者字段组合上,用于加速对表中的数据进行查询。
  • 序列:产生顺序的不重复数字串,被作为主键约束值的参照。
  • 同义词:数据库对象的别名。
二、约束及作用
  • 约束:Constraint,是定义在表上的一种强制规则。
  • 当为某个表定义约束后,对该表做的所有SQL操作都必须满足约束的规则要求,否则操作将会失败。
三、约束类型
  • NOT NULL 非空约束,指定某列的所有行数据不能包含空值
  • UNIQUE 唯一性约束,指定列或者列的组合的所有行数据必须唯一
  • PRIMARY KEY 主键约束,表的每行的唯一性标识,指定列或者列的组合的所有行数据必须唯一
  • FOREIGN KEY 外键约束,在列及引用列上建立的一种强制依赖关系
  • CHECK 检查性约束,在列上指定一个必须满足的条件
四、约束的命名规则
  • 约束也是数据库对象,必须按照,命名规则进行命名,如果你不命名约束,oracle服务器将用SYS_Cn格式产生一个名字,这里n是一个唯一的整数。
  • 除了NOT NULL约束外,建议给其他约束进行命名,
    命名规则为:表名列名约束类型
五、约束操作
  • 定义约束:约束通常在创建表的时候同时被创建
  • 约束既可以写在每个对应列的后面,称之为列级别约束,一个列级别约束只能作用在一个列上;
  • 也可以写完所有列之后,再写约束,称之为表级别约束,一个表级别约束既可以作用在一个列上,也可以作用在列的组合上;
  • NOT NULL约束只能定义在列级别上,联合主键或联合唯一性约束只能定义在表级别上,其它约束既可以定义成表级别,也可以定义成列级别;
  • 列级别约束和表级别约束达到的作用完全相同,只是书写的位置不同;
  • CONSTRAINT:约束的关键字;constraint_name:约束名字;constraint_type:约束的类型;
  • 追加约束:在表被创建后,如果有需求也可以临时添加约束
  • 语法
  • ALTER TABLE table ADD [CONSTRAINT constraint] type (column);
    1.table是表的名字
    2.constraint是约束的名字
    3.type是约束的类型
    4.column是受约束影响的列的名字
  • 追加FOREIGN KEY约束
    ALTER TABLE table ADD [CONSTRAINT constraint] FOREIGN KEY(column)
    REFERENCES table(column));
  • 在emp表中的mgr上添加一个外键约束,指示该列的值必须引用emp表中的empno值
    ALTER TABLE emp
    ADD CONSTRAINT emp_mgr_fk FOREIGN KEY(mgr)
    REFERENCES emp (empno)
  • 追加NOT NULL约束
    ALTER TABLE 表名
    MODIFY (column [CONSTRAINT constraint] NOT NULL)
  • 启用及禁用约束:约束可以被临时禁用和启用

约束禁用

  • 如果有大批量数据导入时,我们可以采用禁用约束的方法,主要的好处,首先效率高,另外有主外键约束的表之间导入时,不用考虑导入的先后顺序。
  • 禁用约束语法:
    ALTER TABLE table DISABLE CONSTRAINT constraint [CASCADE];
  • 应用CASCADE选项禁用相依赖的外键约束
  • 启用约束语法:
    ALTER TABLE table ENABLE CONSTRAINT constraint;
  • 删除约束
  • 语法
    ALTER TABLE table DROP PRIMARY KEY|UNIQUE(column) |CONSTRAINT constraint [CASCADE];
    1.table 是表的名字
    2.column 是受约束影响的列的名字
    3.constraint 是约束的名字
    4.cascade 级联删除
  • 例如:从emp表中删除emp_mgr_fk约束
ALTER TABLE emp DROP CONSTRAINT emp_mgr_fk;
  • 删除dept表上的PRIMARY KEY约束,并且删除相关联的在emp表deptno上的FOREIGN KEY约束
ALTER TABLE dept DROP PRIMARY KEY CASCADE;
//注意:DROP子句的CASCADE选项导致任何与其相依赖的约束也被删除。
六、NOT NULL约束
  • 这里需要注意的就是,非空约束只能够定义在列级别上
七、UNIQUE约束
  • 这里需要注意的就是,每个表中可以有多个唯一约束
  • 唯一约束即可定义在列级别上,也可以定义在表级别上
  • 唯一约束允许输入空值,除非我们在相应的列上定义非空约束
八、PRIMARY KEY约束
  • 作为主键约束的列不能有空值
  • 每个表中只能创建一个主键约束
  • 主键约束即可以定义在列级别上,也可以定义在表级别上
九、FOREIGN KEY约束
  • 外键约束既可以定义在列级别上,也可以定义在表级别上
  • 外键约束与对应的表的主键约束之间是一种依赖关系,当对应的表的主键约束被删除时,这个外键约束也随之删除。
十、CHECK约束
  • 检查性约束的条件表达式不允许使用:
  • 伪列,例如:CURRVAL,NEXTVAL,LEVEL及ROWNUM
  • 可以调用SYSDATE,UID,USER及USEREVN函数
  • 对其他记录其他值的查询
  • 检查性约束可以定义在列级别上,也可以定义在表级别上
十一、相关数据字典
  • 和约束相关的数据字典有:
  • USER_CONSTRAINTS:查看表上所有的约束。
  • USER_CONS_COLUMNS:查看与约束相关的列名,该字典对于那些由系统指定名字的约束特别有用。
  • 在约束类型中,C代表CHECK,P代表PRIMARY KEY,R代表
  • FOREIGN KEY, U代表UNIQUE,NOT NULL约束实际上是一个
    CHECK约束。
SELECT constraint_name, constraint_type 
FROM user_constraints;  

你可能感兴趣的:(约束)