主要就是增加数据约束的。

 

Oracle中的约束简单介绍

约束   Including Constraints

    在数据库中使用约束(constraints)是为了在该数据库中实施所谓的"业务规则"其实就是防止非法信息进入数据库,满足管理员和应用开发人员所定义的规则集.

    ORACLE使用完整性约束(integrity constraints)防止不合法的数据写入数据库,管理员和开发人员可以定义完整性规则,增强商业规则,限制数据表中的数据.如果一个DML语句执行的任何结果破坏了完整性约束,ORACLE就会回滚语句,返回错误信息.

    约束是通过使用CREATE TABLE或ALTER TABLE语句生成的.(建立表时或者表建立后修改都可)如果相关的约束定义在单列上,可以在列这一级指定约束的定义;多列约束必须定义在数据表级,相关的列要在括号中指定,用逗号分隔.如果没有为约束提供一个名字,那么ORACLE会分配一个系统生成的唯一名字,以SYS_开头,你可以使用关键字CONSTRAINTS后面跟随相关的约束名字来为约束指定名字.

ORACLE支持五种类型的完整性约束
NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值.
CHECK (检查)--检查在约束中指定的条件是否得到了满足.
UNIQUE (唯一)--保证在指定的列中没有重复值.在该表中每一个值或者每一组值都将是唯一的.
PRIMARY KEY (主键)--用来唯一的标识出表的每一行,并且防止出现NULL值,一个表只能有一个主键约束.
POREIGN KEY (外部键)--通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定义的外部键可以指向主键或者其他表的唯一键.

以下几种约束 、并 一一列举:

1.主键约束:
要对一个列加主键约束的话,这列就必须要满足的条件就是分空
因为主键约束:就是对一个列进行了约束,约束为(非空、不重复)
以下是代码  要对一个列加主键,列名为id,表名为emp

格式为:
alter table 表格名称 add constraint 约束名称 增加的约束类型 (列名)

例子:
alter table emp add constraint ppp primary key (id)

————————————————————————————————

2.check约束:
就是给一列的数据进行了限制
比方说,年龄列的数据都要大于20的
表名(emp) 列名(age)

格式:
alter table 表名称 add constraint 约束名称 增加的约束类型 (列名)

例子:
alter table emp add constraint xxx check(age>20)

______________________________________________________________________

3.unique约束:
这样的约束就是给列的数据追加的不重复的约束类型

格式:
alter table 表名 add constraint 约束名称 约束类型(列名)
比方说可以给ename列加个unique,让ename列的数据不重复
例子:
alter table emp add constraint qwe unique(ename)

————————————————————————————————

4.默认约束:
意思很简单就是让此列的数据默认为一定的数据

格式:
alter table 表名称 add constraint 约束名称 约束类型 默认值) for 列名

比方说:emp表中的gongzi列默认为10000

alter table emp add constraint jfsd default 10000 for gongzi

————————————————————————————————

5.外键约束:
这个有点难理解了,外键其实就是引用
因为主键实现了实体的完整性,
外键实现了引用的完整性,
应用完整性规定,所引用的数据必须存在!

其实就是个引用,
比方说一个表名称叫dept 里面有2列数据 一列是ID一列是ENAME
id:表示产品的编号
ename:表示产品的名称

另外一个表格名称是emp 里面有2列数据,一列是ID 一列是DID
id:表示用户号
did:表示购买的产品号

要让emp表中的did列去引用dept表中的id

可以用下面的方法

格式:
alter table 表名 add constraint 约束名称 约束类型 (列名) references 被引用的表名称 (列名)

例子:

alter table emp add constraint jfkdsj foreign key (did) references dept (id)

 

 

 

约束定义存储在数据字典中,查询USER_CONSTRAINTS可以获得相关信息.

定义约束
CREATE TABLE [schema.]table
                  (column datatype [DEFAULT expr]
                  [column_constraint],
                      ...
                  [table_constraint][,...]);
e.g.
CREATE TABLE employees
                  (employee_id NUMBER(6),
                      first_name     VARCHAR2(20),
                      ...
                      job_id           VARCHAR2(10) NOT NULL,
                      CONSTRAINTS emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID));
列级的约束定义
column [CONSTRAINT constraint_name] constraint_type,
表级约束的定义
column,..
[CONSTRAINT constraint_name] constraint_type (column,...)

NOT NULL约束
只能定义在列级,不能定义在表级.
e.g.
CREATE TABLE employees
                  (employee_id NUMBER(6),
                      last_name     VARCHAR2(25) NOT NULL, //没有指定名字,将用系统SYS_命名
                      salary          NUMBER(8,2),
                      commission_pct NUMBER(2,2),
                      hire_date    DATE CONSTRAINT emp_hire_date_nn NOT NULL);   //用户定义了名字

UNIQUE约束
用来保护一个表中的一个或者多个列没有任何两行在收到保护的列中具有重复的数据.ORACLE在唯一键列上自动生成一个唯一索引以实现唯一性
e.g.
CREATE TABLE employees
                  (employee_id NUMBER(6),
                      last_name     VARCHAR2(25) NOT NULL, 
                      salary          NUMBER(8,2),
                      commission_pct NUMBER(2,2),
                      hire_date DATE NOT NULL,
                      CONSTRAINT emp_email_uk UNIQUE(email));

PRIMARY KEY约束
唯一键的所有特征都适用于主键约束,只是在主键列中不允许有NULL值.一个表只能有一个主键.
e.g.
CREATE TABLE departments
                  (department_id NUMBER(4),
                      department_name VARCHAR2(30) CONSTRAINT dept_name_nn NOT NULL,
                      manager_id       NUMBER(6),
                      location_id           NUMBER(4),
                      CONSTRAINT dept_id_pk PRIMARY KEY(department_id));

FOREIGN KEY 约束
用来保护一个表中的一个或者多个列,它会通过一个主键主键或者唯一键保证对于每个非NULL值在数据库的其他地方都有一个数据可用.这个外部键就是在生成此约束的表(子表)中的一个或多个列,在父级表和子表中,相关列的数据类型必须匹配.外部键列和引用键(reference key)列可以位于相同的表中(自引用完整性约束).
e.g.
CREATE TABLE employees
                  (employee_id NUMBER(6),
                      last_name     VARCHAR2(25) NOT NULL, 
                      salary          NUMBER(8,2),
                      commission_pct NUMBER(2,2),
                      hire_date DATE NOT NULL,
                      deparment_id NUMBER(4),
                      CONSTRAINT emp_dept_fk FOREIGN KEY(department_id) REFERENCES departments(department_id),
                      CONSTRAINT emp_email_uk UNIQUE(email));

上例中是在表级定义外部键约束,如果在列级定义,不同的是:
CREATE TABLE employees
                  (...,
                      department_id NUMBER(4) CONSTRAINT emp_deptid_fk REFERENCES departments(department_id),
                  ...);
                   //没有关键字FOREIGN KEY
FOREIGN KEY约束还有两个关键字是
ON DELETE CASCADE --当删除所引用的父表记录时,删除子表中相关的记录
ON DELETE SET NULL--与上面不同的是删除时,转换子表中相关记录为NULL值
默认情况下,如果没有指定以上两个中任一,则父表中被引用的记录将不能被删除.

CHECK 约束
[CONSTRAINT <constraint name>] CHECK (<condition>
这里CHECK子句中的CONDITION应该求值为一个布尔值结果,并且可以引用相同行中其他列的值;不能包含子查询,序列,环境函数(SYSDATE,UID,USER,USERENV)和伪列(ROWNUM,LEVEL,CURRVAL,NEXTVAL),一个列上可以定义多个CHECK约束,如果所定义的条件为FALSE,则语句将回滚.
CREATE TABLE employees
                  (...,
                      salary NUMBER(8,2) CONSTRAINT emp_salary_min CHECK (salary>0),
                      ...);

 

添加约束
ALTER TABLE employees
ADD CONSTRAINT emp_manager_fk FOREIGN KEY(manager_id) REFERENCES employees(employee_id);
删除约束
ALTER TABLE employees
DROP CONSTRAINT emp_manager_fk;
ALTER TABLE departments
DROP PRIMARY KEY CASCADE; //由于departments被employees.department_id引用了
对于NOT NULL约束,用ALTER TABLE MODIFY子句来删除
ALTER TABLE employees MODIFY last_name NULL;
关闭约束
ALTER TABLE employees
DISABLE CONSTRAINT emp_emp_id_pk CASCADE;   //如果没有被引用则不需CASCADE关键字
当你生成一个约束时,约束自动打开(除非你指定了DISABLE子句0,当用DISABLE关闭UNIQUE或者PRIMARY KEY约束时,ORACLE会自动删除相关的唯一索引,再次打开时,ORACLE又会自动建立的.
打开约束
ALTER TABLE employees
ENABLE CONSTRAINT emp_emp_id_pk; //注意,打开一个先前关闭的被引用的主键约束,并不能自动打开相关的外部键约束

可以从USER_CONSTRAINTS表和USER_CONS_COLUMNS视图中查询约束的信息
SELECT constraint_name,constraint_type,search_condition
FROM user_constraints
WHERE   table_name='EMPLOYEES';

约束类型
C--CHECK和NOT NULL都算为C TYPE
P--PRIMARY KEY
R--REFERENTIAL INTEGRITY就是外部键约束
U--UNIQUE

SELECT constraint_name,column_name
FROM user_cons_columns
WHERE   table_name='EMPLOYEES';

主要就是增加数据约束的。

 

Oracle中的约束简单介绍

约束   Including Constraints

    在数据库中使用约束(constraints)是为了在该数据库中实施所谓的"业务规则"其实就是防止非法信息进入数据库,满足管理员和应用开发人员所定义的规则集.

    ORACLE使用完整性约束(integrity constraints)防止不合法的数据写入数据库,管理员和开发人员可以定义完整性规则,增强商业规则,限制数据表中的数据.如果一个DML语句执行的任何结果破坏了完整性约束,ORACLE就会回滚语句,返回错误信息.

    约束是通过使用CREATE TABLE或ALTER TABLE语句生成的.(建立表时或者表建立后修改都可)如果相关的约束定义在单列上,可以在列这一级指定约束的定义;多列约束必须定义在数据表级,相关的列要在括号中指定,用逗号分隔.如果没有为约束提供一个名字,那么ORACLE会分配一个系统生成的唯一名字,以SYS_开头,你可以使用关键字CONSTRAINTS后面跟随相关的约束名字来为约束指定名字.

ORACLE支持五种类型的完整性约束
NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值.
CHECK (检查)--检查在约束中指定的条件是否得到了满足.
UNIQUE (唯一)--保证在指定的列中没有重复值.在该表中每一个值或者每一组值都将是唯一的.
PRIMARY KEY (主键)--用来唯一的标识出表的每一行,并且防止出现NULL值,一个表只能有一个主键约束.
POREIGN KEY (外部键)--通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定义的外部键可以指向主键或者其他表的唯一键.

以下几种约束 、并 一一列举:

1.主键约束:
要对一个列加主键约束的话,这列就必须要满足的条件就是分空
因为主键约束:就是对一个列进行了约束,约束为(非空、不重复)
以下是代码  要对一个列加主键,列名为id,表名为emp

格式为:
alter table 表格名称 add constraint 约束名称 增加的约束类型 (列名)

例子:
alter table emp add constraint ppp primary key (id)

————————————————————————————————

2.check约束:
就是给一列的数据进行了限制
比方说,年龄列的数据都要大于20的
表名(emp) 列名(age)

格式:
alter table 表名称 add constraint 约束名称 增加的约束类型 (列名)

例子:
alter table emp add constraint xxx check(age>20)

______________________________________________________________________

3.unique约束:
这样的约束就是给列的数据追加的不重复的约束类型

格式:
alter table 表名 add constraint 约束名称 约束类型(列名)
比方说可以给ename列加个unique,让ename列的数据不重复
例子:
alter table emp add constraint qwe unique(ename)

————————————————————————————————

4.默认约束:
意思很简单就是让此列的数据默认为一定的数据

格式:
alter table 表名称 add constraint 约束名称 约束类型 默认值) for 列名

比方说:emp表中的gongzi列默认为10000

alter table emp add constraint jfsd default 10000 for gongzi

————————————————————————————————

5.外键约束:
这个有点难理解了,外键其实就是引用
因为主键实现了实体的完整性,
外键实现了引用的完整性,
应用完整性规定,所引用的数据必须存在!

其实就是个引用,
比方说一个表名称叫dept 里面有2列数据 一列是ID一列是ENAME
id:表示产品的编号
ename:表示产品的名称

另外一个表格名称是emp 里面有2列数据,一列是ID 一列是DID
id:表示用户号
did:表示购买的产品号

要让emp表中的did列去引用dept表中的id

可以用下面的方法

格式:
alter table 表名 add constraint 约束名称 约束类型 (列名) references 被引用的表名称 (列名)

例子:

alter table emp add constraint jfkdsj foreign key (did) references dept (id)

 

 

 

约束定义存储在数据字典中,查询USER_CONSTRAINTS可以获得相关信息.

定义约束
CREATE TABLE [schema.]table
                  (column datatype [DEFAULT expr]
                  [column_constraint],
                      ...
                  [table_constraint][,...]);
e.g.
CREATE TABLE employees
                  (employee_id NUMBER(6),
                      first_name     VARCHAR2(20),
                      ...
                      job_id           VARCHAR2(10) NOT NULL,
                      CONSTRAINTS emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID));
列级的约束定义
column [CONSTRAINT constraint_name] constraint_type,
表级约束的定义
column,..
[CONSTRAINT constraint_name] constraint_type (column,...)

NOT NULL约束
只能定义在列级,不能定义在表级.
e.g.
CREATE TABLE employees
                  (employee_id NUMBER(6),
                      last_name     VARCHAR2(25) NOT NULL, //没有指定名字,将用系统SYS_命名
                      salary          NUMBER(8,2),
                      commission_pct NUMBER(2,2),
                      hire_date    DATE CONSTRAINT emp_hire_date_nn NOT NULL);   //用户定义了名字

UNIQUE约束
用来保护一个表中的一个或者多个列没有任何两行在收到保护的列中具有重复的数据.ORACLE在唯一键列上自动生成一个唯一索引以实现唯一性
e.g.
CREATE TABLE employees
                  (employee_id NUMBER(6),
                      last_name     VARCHAR2(25) NOT NULL, 
                      salary          NUMBER(8,2),
                      commission_pct NUMBER(2,2),
                      hire_date DATE NOT NULL,
                      CONSTRAINT emp_email_uk UNIQUE(email));

PRIMARY KEY约束
唯一键的所有特征都适用于主键约束,只是在主键列中不允许有NULL值.一个表只能有一个主键.
e.g.
CREATE TABLE departments
                  (department_id NUMBER(4),
                      department_name VARCHAR2(30) CONSTRAINT dept_name_nn NOT NULL,
                      manager_id       NUMBER(6),
                      location_id           NUMBER(4),
                      CONSTRAINT dept_id_pk PRIMARY KEY(department_id));

FOREIGN KEY 约束
用来保护一个表中的一个或者多个列,它会通过一个主键主键或者唯一键保证对于每个非NULL值在数据库的其他地方都有一个数据可用.这个外部键就是在生成此约束的表(子表)中的一个或多个列,在父级表和子表中,相关列的数据类型必须匹配.外部键列和引用键(reference key)列可以位于相同的表中(自引用完整性约束).
e.g.
CREATE TABLE employees
                  (employee_id NUMBER(6),
                      last_name     VARCHAR2(25) NOT NULL, 
                      salary          NUMBER(8,2),
                      commission_pct NUMBER(2,2),
                      hire_date DATE NOT NULL,
                      deparment_id NUMBER(4),
                      CONSTRAINT emp_dept_fk FOREIGN KEY(department_id) REFERENCES departments(department_id),
                      CONSTRAINT emp_email_uk UNIQUE(email));

上例中是在表级定义外部键约束,如果在列级定义,不同的是:
CREATE TABLE employees
                  (...,
                      department_id NUMBER(4) CONSTRAINT emp_deptid_fk REFERENCES departments(department_id),
                  ...);
                   //没有关键字FOREIGN KEY
FOREIGN KEY约束还有两个关键字是
ON DELETE CASCADE --当删除所引用的父表记录时,删除子表中相关的记录
ON DELETE SET NULL--与上面不同的是删除时,转换子表中相关记录为NULL值
默认情况下,如果没有指定以上两个中任一,则父表中被引用的记录将不能被删除.

CHECK 约束
[CONSTRAINT <constraint name>] CHECK (<condition>
这里CHECK子句中的CONDITION应该求值为一个布尔值结果,并且可以引用相同行中其他列的值;不能包含子查询,序列,环境函数(SYSDATE,UID,USER,USERENV)和伪列(ROWNUM,LEVEL,CURRVAL,NEXTVAL),一个列上可以定义多个CHECK约束,如果所定义的条件为FALSE,则语句将回滚.
CREATE TABLE employees
                  (...,
                      salary NUMBER(8,2) CONSTRAINT emp_salary_min CHECK (salary>0),
                      ...);

 

添加约束
ALTER TABLE employees
ADD CONSTRAINT emp_manager_fk FOREIGN KEY(manager_id) REFERENCES employees(employee_id);
删除约束
ALTER TABLE employees
DROP CONSTRAINT emp_manager_fk;
ALTER TABLE departments
DROP PRIMARY KEY CASCADE; //由于departments被employees.department_id引用了
对于NOT NULL约束,用ALTER TABLE MODIFY子句来删除
ALTER TABLE employees MODIFY last_name NULL;
关闭约束
ALTER TABLE employees
DISABLE CONSTRAINT emp_emp_id_pk CASCADE;   //如果没有被引用则不需CASCADE关键字
当你生成一个约束时,约束自动打开(除非你指定了DISABLE子句0,当用DISABLE关闭UNIQUE或者PRIMARY KEY约束时,ORACLE会自动删除相关的唯一索引,再次打开时,ORACLE又会自动建立的.
打开约束
ALTER TABLE employees
ENABLE CONSTRAINT emp_emp_id_pk; //注意,打开一个先前关闭的被引用的主键约束,并不能自动打开相关的外部键约束

可以从USER_CONSTRAINTS表和USER_CONS_COLUMNS视图中查询约束的信息
SELECT constraint_name,constraint_type,search_condition
FROM user_constraints
WHERE   table_name='EMPLOYEES';

约束类型
C--CHECK和NOT NULL都算为C TYPE
P--PRIMARY KEY
R--REFERENTIAL INTEGRITY就是外部键约束
U--UNIQUE

SELECT constraint_name,column_name
FROM user_cons_columns
WHERE   table_name='EMPLOYEES';
---------------------

原文:https://blog.csdn.net/shaderdx/article/details/77184924

sql 约束汇总的更多相关文章

  1. SQL CREATE TABLE 语句\SQL 约束 (Constraints)\SQL NOT NULL 约束\SQL UNIQUE 约束

    CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据 ...

  2. SQL约束

    SQL约束: 非空约束:就是不能为null: 主键约束(PK):唯一,不重复,并且不为空: 唯一约束:唯一,允许为空,但只能出现一次: 默认约束:如果不给值,默认值: 检查约束:范围以及格式限制: 外 ...

  3. Mysql笔记【3】-SQL约束

    SQL 约束 约束用于限制加入表的数据的类型. 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句). 我们将主要探讨以下几种约 ...

  4. SQL 约束解说

    SQL 约束解说 2009-04-27 09:29 约束主要包含: NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK DEFAULT 1.not null : ...

  5. SQL 约束 (Constraints)

    SQL 约束 约束用于限制加入表的数据的类型. 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句). 我们将主要探讨以下几种约 ...

  6. SQL小汇总

    SQL小汇总 1.对每个时段的数据进行统计2.查询时间条件(to_date)3.插入序列号和系统时间4.查询当天.7天内.30天内5.查询前后x小时.分钟.天.月.6.保留小数点后4位7.查询字段A中 ...

  7. SQL 约束(Constraints)

    SQL 约束(Constraints) SQL 约束(Constraints) SQL 约束用于规定表中的数据规则. 如果存在违反约束的数据行为,行为会被约束终止. 约束可以在创建表时规定(通过 CR ...

  8. SQL-W3School-高级:SQL 约束(Contraints)

    ylbtech-SQL-W3School-高级:SQL 约束(Contraints) 1.返回顶部 1. SQL 约束 约束用于限制加入表的数据的类型. 可以在创建表时规定约束(通过 CREATE T ...

  9. Bugku-CTF之login1(SKCTF) [SQL约束攻击]

    Day26 login1(SKCTF) http://123.206.31.85:49163/flag格式:SKCTF{xxxxxxxxxxxxxxxxx}hint:SQL约束攻击  本题要点:SQL ...

随机推荐

  1. selenium cookie 登录

    前言 爬虫方向的小伙伴们都知道网页爬虫经常遇到的问题就是登录账户,有些简单的网站我们可以简单的send key来输入账户密码就可以登录,但是有很多网站需要验证码之类的就不太好用了,这时候就体现到了co ...

  2. Python之装饰器笔记

    概述: 用于管理和增强函数和类行为的代码 提供一种在函数或类定义中插入自动运行代码的机制 特点  更明确的语法.更高的代码可维护性.更好的一致性 编写 函数基础: 将函数赋给变量.将函数作为参数传递. ...

  3. java——内存中的数组

    数组是一种引用类型,数组引用变量只是一个引用,数组元素和数组变量在内存中时分开存放的,下面我们看一下基本类型的数组和引用类型的数组在内存中的地址分布情况 基本类型数组: 我们先来看一段代码: publ ...

  4. (十三)JSON的使用(下)

    (接上一章节) 4.2 使用ajax交互方式 使用ajax的转换思想        A:异步请求在页面中发起,也要在页面中接收数据并展现. B:ajax中的数据不能从作用域中获取,只能从respons ...

  5. Android 自定义控件之 日期选择控件

    效果如下: 调用的代码: @OnClick(R.id.btn0) public void btn0() { final AlertDialog dialog = new AlertDialog.Bui ...

  6. sql 触发器里,发生错误,回滚提示错误语句

    SET @msg='错误消息';                RAISERROR(@msg, 16, 1);                ROLLBACK TRANSACTION;         ...

  7. ajax检查用户名重复

    1.获取ajax对象 new XMLHttpRequest(); IE6-8: new ActiveXOject("Microsoft.XMLHTTP"); 兼容判断:if(XML ...

  8. 简单注册表单--HTML练手项目3【Table】

    [本文为原创,转载请注明出处] 技术[HTML]   布局[Table] 步骤1  划分table布局 步骤2 填充内容 文本框+密码框+单选框+复选框+多行文本域+按钮 <input> ...

  9. form-create教程:移除默认提交按钮

    本文将介绍form-create如何修改,隐藏默认提交按钮 form-create 是一个可以通过 JSON 生成具有动态渲染.数据收集.验证和提交功能的表单生成器.并且支持生成任何 Vue 组件.结 ...

  10. 程哥带你学python-[第一章-初识Python]

    Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年. 像Perl语言一样, Pyt ...