第十四章约束

2024-04-29 01:18
文章标签 第十四章 约束

本文主要是介绍第十四章约束,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

约束

Constraint是一种保证数据完整性的规则。约束设置在单个字段或者多个字段组合上,写入这些字段的行数据必须要符合约束的规则

约束的五种类型:

 NOT NULL         非空约束,指定某列的所有行数据不能包含空值

 UNIQUE          唯一性约束,指定列或者列的组合的所有行数据必须唯一 

PRIMARY KEY        主键约束,表的每行的唯一性标识,指定列或者列的 

                             组合的所有行数据必须唯一 

 FOREIGN KEY        外键约束,在列及引用列上建立的一种强制依赖关系 

CHECK           检查性约束,在列上指定一个必须满足的条件    

约束命名规则 

• 约束也是数据库对象,必须按照命名规则命名,如果你不命名约束,Oracle服务器将用SYS_Cn格式产生一个名字,这里n是一个唯一的整数。 

• 除了NOT NULL约束外,建议给其它约束起名字,命名规则为:表名_列名_约束类型。 

约束操作 

• 定义约束:约束通常在创建表的同时被创建; 

• 追加约束:在表被创建后,如果有需求也可以临时添加约束; 

• 启用及禁用约束:约束可以被临时禁用和启用。 

定义约束:

–约束既可以写在每个对应列的后面,称之为列级别约束,一个列级别约束只能作 

      用在一个列上; 

    –也可以写完所有列之后,再写约束,称之为表级别约束,一个表级别约束既可以 

      作用在一个列上,也可以作用在列的组合上; 

    –NOT NULL约束只能定义在列级别上联合主键或联合唯一性约束只能定义在表级 

      别上(限定在列的组合上的)其它约束既可以定义成表级别,也可以定义成列级别; 

    –列级别约束和表级别约束达到的作用完全相同,只是书写的位置不同

    –CONSTRAINT:约束的关键字;constraint_name:约束名字;constraint_type:约 

       束的类型;

• NOT NULL约束 :也叫非空约束,确保被约束列的所有行记录都不能为空值。只能定义在列级别上。 

• UNIQUE约束:也叫唯一约束,用来确保表中的某一列或者某几列组合的所有行数据必须唯一,定义UNIQUE约束的列 (或列组合被称为唯一键。 

• 每个表可以有多个为UNIQUE约束。  

• UNIQUE约束允许输入空值,除非我们在相应的列上定义NOT  NULL 约束。 

 PRIMARY KEY约束:主键约束,用来确保表中的某一列或者某几列组合的所有行数据必须唯一,并且确保作为主键一部分的列不能包含空值; 

• 每个表只能创建一个主键约束。

 

 

主键和唯一键的区别:

1,唯一性约束键默认没有not null约束,而主键默认有一个 not null,

2,一个表中最多只能有一个主键,可以有多个唯一键

通常把唯一标识一行的,流水号----主键

身份证--------唯一键

• FOREIGN KEY,也叫外键约束,外键确保了相关联的两个字段的关系: 

     –外键列的值必须在引用列值的范围内,或者为空; 

     –外键参照的是列必须是主键或者唯一键; 

• 主键表主键值被外键表参照时,主键表记录不允许被删除。 

• FOREIGN KEY: 定义在子表的列中 

• REFERENCES: 引用列所在的父表 

 

• 注

 –ON DELETE CASCADE:当父表中的行被删除时,子表中相依赖的行同时被删除;(级联) 

 –ON DELETE SET NULL:当父表的行被删除时,子表中相依赖的行被转换为空值; 

 –无ON DELETE CASCADEON DELETE SET NULL选项,当附表中的行被删除时,如果父表中的行在子表中被引用,则提示不能被删除。 

 

• CHECK约束,也叫检查性约束,确保某个列的所有行数据都必须满足的条件,如: 

     –sal NUMBER(82) CONSTRAINT dept_sal_min CHECK 

        (salary > 0) 

     –要求sal字段的所有行数据必须大于

    • 表达式不允许使用

     –伪列,例如:CURRVAL, NEXTVAL, LEVELROWNUM; 

     –可以调用SYSDATE, UID, USERUSERENV 函数; 

     –对其它记录其它值的查询。 

 

使用子查询创建表的时候,约束不会被继承过来,只是复制了一些表结构

追加约束 

• 也可以用ALTER TABLE语句为表: 

       –追加或删除约束,但不修改它的结构; 

       –启用或禁用约束; 

       –用MODIFY子句添加一个NOT NULL约束; 

• 追加约束,语法为: 

 

  ALTER TABLE table ADD [CONSTRAINT constraint] type (column); 

• 追加NOT NULL 约束 

 

 ALTER TABLE table 

        MODIFY (column [CONSTRAINT constraint]  NOT NULL); 

删除约束 

 

• 语法 

 ALTER TABLE table DROP PRIMARY KEY|UNIQUE(column) 

 |CONSTRAINT constraint [CASCADE]; 

• 在语法中: 

      –table 是表的名字 

      –column 是受约束影响的列的名字 

      –constraint 是约束的名字 

      –cascade 级联删除 

• 例:emp表中删除emp_mgr_fk约束 

 ALTER TABLE emp DROP CONSTRAINT emp_mgr_fk; 

• 例:删除dept表上的PRIMARY KEY约束,并且删除相关联的在empdeptno上的FOREIGN KEY约束

 ALTER TABLE dept DROP PRIMARY KEY CASCADE; 

• DROP子句的CASCADE选项导致任何与其相依赖的约束也被删除。 

约束启用与禁用 

• 约束禁用 

     –如果有大批量数据导入时,我们可以采用禁用约束的方法, 

       主要的好处,首先效率高,另外有主外键约束的表之间导 

       入时,不用考虑导入的先后顺序。 

     –禁用约束语法: 

   ALTER TABLE table  DISABLE CONSTRAINT constraint [CASCADE]; 

     –应用CASCADE选项禁用相依赖的外键约束 

     –启用约束语法: 

  ALTER TABLE table  ENABLE CONSTRAINT constraint; 

 

这篇关于第十四章约束的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/944754

相关文章

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

poj 3159 (spfa差分约束最短路) poj 1201

poj 3159: 题意: 每次给出b比a多不多于c个糖果,求n最多比1多多少个糖果。 解析: 差分约束。 这个博客讲差分约束讲的比较好: http://www.cnblogs.com/void/archive/2011/08/26/2153928.html 套个spfa。 代码: #include <iostream>#include <cstdio>#i

poj 3169 spfa 差分约束

题意: 给n只牛,这些牛有些关系。 ml个关系:fr 与 to 牛间的距离要小于等于 cost。 md个关系:fr 与 to 牛间的距离要大于等于 cost。 隐含关系: d[ i ] <= d[ i + 1 ] 解析: 用以上关系建图,求1-n间最短路即可。 新学了一种建图的方法。。。。。。 代码: #include <iostream>#include

POJ 1364差分约束

给出n个变量,m个约束公式 Sa + Sa+1 + .... + Sa+b < ki or > ki ,叫你判断是否存在着解满足这m组约束公式。 Sa + Sa+1   +   .+ Sa+b =  Sum[a+b] - Sum[a-1]  . 注意加入源点n+1 。 public class Main {public static void main(Strin

创建表时添加约束

查询表中的约束信息: SHOW KEYS FROM 表名; 示例: 创建depts表包含department_id该列为主键自动增长,department_name列不允许重复,location_id列不允许有空值。 create table depts(department_id int primary key auto_increment,department_name varcha

非空约束(Not Null)

修改表添加非空约束 使用DDL语句添加非空约束 ALTER TABLE 表名 MODIFY 列名 类型 NOT NULL; 示例: 向emp表中的salary添加非空约束。 alter table emp modify salary float(8,2) not NULL; 删除非空约束 使用DDL语句删除非空约束 ALTER TABLE 表名 MODIFY 列名 类型 NULL;

机器学习模型中的因果关系:引入单调约束

单调约束是使机器学习模型可行的关键,但它们仍未被广泛使用欢迎来到雲闪世界。 碳ausality 正在迅速成为每个数据科学家工具包中必不可少的组成部分。 这是有充分理由的。 事实上,因果模型在商业中具有很高的价值,因为它们为“假设”情景提供了更可靠的估计,特别是在用于做出影响业务结果的决策时。 在本文中,我将展示如何通过简单的更改(实际上添加一行代码)将传统的 ML 模型(如随机森林、L

javaweb-day01-3(XML 的 dtd 约束)

XML 的约束方式有两种:dtd 和 schema  DTD约束: Document Type Definition    文档类型定义、文档类型界定。 入门示例: book.xml : <?xml version="1.0" encoding="gb2312"?><!DOCTYPE 书架 SYSTEM "book.dtd"><书架><书><书名>J

oracle2之约束

《1》子查询和关联查询 建立表如下: 学生基本信息表 CREATE Student( [Studentid][Int]IDENTITY(1,1)NOT NULL primary key,--主键 [StudentName][char]NOT NULL ) 课程信息表 CREATE Subject( [SubjectID][char]NOT NUL

Leetcode3258. 统计满足 K 约束的子字符串数量 I

Every day a Leetcode 题目来源:3258. 统计满足 K 约束的子字符串数量 I 解法1:暴力 暴力枚举每一个子字符串,看是否满足 k 约束。 代码: /** @lc app=leetcode.cn id=3258 lang=cpp** [3258] 统计满足 K 约束的子字符串数量 I*/// @lc code=startclass Solution{publ