精华内容
下载资源
问答
  • oracle约束

    2015-06-01 10:13:29
    oracle约束 一、维护数据的完整性 概述:数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则。在Oracle中,数据完整性可以使用约束、触发器、应用程序(过程、函数)三种方法来实现,在这三种方法中,...

    oracle之约束

    一、维护数据的完整性

    概述:数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则。在Oracle中,数据完整性可以使用约束、触发器、应用程序(过程、函数)三种方法来实现,在这三种方法中,因为约束易于维护,并且具有最好的性能,所以作为维护数据完整性的首选。

    1、约束

    约束用于确保数据库数据满足特定的商业规则。在Oracle中,约束包括:not null、unique、primary key, foreign key和check五种。

    A、not null(非空)

    如果在列上定义了not null,那么当插入数据时,必须为列提供数据。

    B、unique(唯一)

    当定义了唯一约束后,该列值是不能重复的,但是可以为null。

    C、primary key(主键)

    用于唯一的标识表行的数据,当定义主键约束后,该列不但不能重复而且不能为NULL。一张表最多只能有一个主键,但是可以由多个unique约束。

    D、foreign key(外键)

    用于定义主表和从表之间的关系,外键约束要定义在从表上,主要则必须具有主键约束或是unique约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为NULL。

    E、check

    用于强制行数据必须满足的条件,假定在sal列上定义了check约束,并要求sal列值在1000~2000之间,如果不在1000~2000之间就会提示出错。

    综合案例:

    商品售货系统表设计案例

    现在有一个商店的数据库,记录客户及其购物情况,由下面三个表组成:

    商品表Goods(商品号GoodsId,商品名GoodName,单价UnitPrice,商品类别Categroy,供应商Provider)

    客户表Customers(客户号CustomerId,姓名Name,住址Address,电邮Email,性别Gender,身份证CardId)

    销售表Purchases(客户号CustomerId,商品号GoodsId,购买数量Num)

    请用SQL语言完成下列功能:

    建表,在定义中要求声明:

    (1)每个表的主外键。

    (2)客户的姓名不能为空值。

    (3)单价必须大于0,购买数量必须在1~30之间。

    (4)电邮不能够重复。

    (5)客户的性别必须是男或女,默认是男。

    sql>create table Goods(

    GoodsId char(8) primary key ,--主键

    GoodName varchar2(50),

    UnitPrice number(10,2) check(UnitPrice>0),--单价必须大于0

    Category varchar(30),

    Provider varchar(100));

    sql>create table Customers(

    CustomerId char(8) primary key,

    Name varchar2(30) not null, --姓名不能为空

    Address varchar2(150),

    Email varchar2(100) unique,--必须唯一

    Gender char(2) default('男') check(Gender in('男','女')),

    CardId char(18));

    sql>create table Purchases(

    CustomerId char(8) references Customers(CustomerId), --外键

    GoodsId char(8) references Goods(GoodsId),

    Num number(10) check(Num between 1 and 30)));

    2、添加约束

    如果在建表时忘记建立必要的约束,则可以在建表后使用alter table命令为表增加约束,但是要注意:增加not null约束时,需要使用modify选项,而增加其他四种约束使用add选项。

    (1)增加商品名也不能为空

    sql>alter table Goods modify GoodsId not null;

    (2)增加身份证也不能重复

    sql>alter table Customers add constraint UQ_CardId unique(CardId);

    (3)增加客户的住址只能是海淀、朝阳、东城、西域

    sql>alter table Customers add constraint CK_Address check(Address in ('海淀','朝阳','东城','西域'));

    3、删除约束

    当不再需要某个约束时,可以删除。

    sql>alter table 表名 drop constraint 约束名称;

    特别说明:

    在删除主键约束的时候,可能有错误。比如

    sql> alter table 表名 drop primary key;

    这是因为如果在两表存在主从关系,那么在删除主表主键约束时,必须带上cascade选项。

    sql> alter table 表名 drop primary key cascade;

    4、显示约束信息

    A、显示约束信息

    通过查询数据字典视图user_constraints,可以显示当前用户所有的约束的信息。

    sql>select constraint_name,constraint_type,status,validated from user_constraints where table_name='Goods';

    B、显示列约束

    通过查询数据字典视图user_cons_column,可以显示约束所对应的表列信息。

    sql>select column_name,position from user_cons_columns where constraint_name='CK_Address';

    6、表级定义和列级定义

    A、表级定义

    表级定义是指在定义了所有列后,再定义约束,这里需要注意,not null约束只能在列级上定义。

    案例:

    sql> create table Goods(

    GoodsId char(8),GoodsName varchar2(50), Category varchar(30),

    constraint PK_GoodsId primary key(GoodsId));

    B、列级定义

    列级定义是在定义列的同时定义约束。

    案例:

    sql>create table Goods(

    GoodsId char(8) constraint PK_GoodsId primary key ,--主键

    GoodName varchar2(50),

    UnitPrice number(10,2) check(UnitPrice>0),--单价必须大于0

    Category varchar(30),

    Provider varchar(100));


    展开全文
  • Oracle Check约束

    千次阅读 2019-01-08 20:53:53
    最近做一份数据库的任务,发现MySQL中不支持在创建表定义字段时使用check约束,如果要...下面正式记录一下,Oracle数据库各种各样的check约束的使用方法 引用: https://www.cnblogs.com/ChineseIntelligentLanguag...

    最近做一份数据库的任务,发现MySQL中不支持在创建表定义字段时使用check约束,如果要在MySQL中使用类似字段约束取值,有两种方式:1.枚举enum,2.创建触发器

    MySQL关于check约束无效的解决办法

    下面正式记录一下,Oracle数据库各种各样的check约束的使用方法

    引用: https://www.cnblogs.com/ChineseIntelligentLanguage/p/6513282.html

    1.检查约束 ( check )
      某列取值范围限制、格式限制等
      
    2.检查只能是男或者女

    create table test29(         
    	id number primary key, 
        sex varchar2(2) check(sex in ('男,女'))  
     );   
    
    create table test30(         
         id number primary key,         
         sex varchar2(2) check(sex ='男' or sex='女')  
    );    
    
    create table test31(         
         id number primary key,         
         sex varchar2(2)  
       );  
    
    alter table test31 add constraint chkk check (sex ='男' or sex='女');  
    alter table test31 add constraint chkk check (sex in('男','女'));  
    

    3.在一个范围中间

    create table test32(       
          id number primary key,       
          age number check(age>0 and age<120)
       );
    create table test33(       
           id number primary key,       
          age number check(age between 12 and 30)
       );
       create table test34(       
            id number primary key ,       
            age number
       );
       alter table test34 add constraint ch_test34 check(age>0 and age<120);
       alter table test34 add constraint ch_test34 check(age between 12 and 30);  
    

    4.长度大于某个值

    create table test35(       
              id number primary key,       
              password varchar2(10) check(length(password)=6)
       );
       
    create table test36(       
              id number primary key ,       
          password varchar2(20)
       );
      alter table test36 add constraint check_test36 check(length(password)=6);
    

    5.数大于某个值

    create table test37(      
         id number(10)primary key ,      
         no number(10) check(no>1) 
       );
       
    create table test38(       
          id number(10) primary key,      
          no number(10)
       );
    alter table test38 add constraint ch_test38 check(no>1);
    

    6.只能是8位字符,前两位是 0 ,3~4位为数字,第 5 位为"_"下划线,6~8位为字母

    create table test39(       
           id number(10) primary key,       
           password varchar2(20) check((password like '00[0-9][0-9]/_[a-z,A-Z][a-z,A-Z][a-z,A-Z]%' escape '/')and(length(password)=8) )
       );
       insert into test39 values (1,'0011_aaa');
       
       create table test40(       
            id number(10) primary key ,       
            password varchar2(10)check((password like '00[0-9][0-9][_][a-z,A-Z][a-z,A-Z][a-z,A-Z]%')and(length(password)=8) ));
       );
       alter table test40 modify password varchar2(10)check((password like '00[0-9][0-9][_][a-z,A-Z][a-z,A-Z][a-z,A-Z]%')and(length(password)>1) 
       insert into test40 values(1,'0012_abc');
    

    7.电子邮箱要含有@符号check(字段 like ‘%@%’)

     create table test41(       
              id number(10) primary key,       
              email varchar2(10) check (email like '%@%') 
        );
        insert into test41 values(1,'12@126.com');
    

    8.SQL中用check约束一列的首字母为’s’check(字段 like ‘s%’)

    create table test42(       
            id number(10) primary key ,       
            name varchar2(10) check(name like 's%')
         );
     insert into test42 values(1,'sname');
    

    9.检查约束前3位和后8位均为数字字符:
    check(字段 like ‘[0-9][0-9][0-9]%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’)

    create table test43(       
             id number(10) primary key,       
             no varchar2(10)check(no like '[0-9][0-9][0-9]%[0-9][0-9][0-9][0-9][0-9]')
     );
     insert into test43 values(1,'12345678');
    

    10.如何建立检查身份证的约束,身份证是18位,最后一位还有可能是X

     create table test44(       
       id number(10) primary key,       
       no values(18) check( length(no)=18 and right(no,17)like '[0-9]' or right (no,17) like 'x' )
     );
    insert into test44 values (1,'12345678912345678x');
    
    select 身份证号 from 表名where len(身份证号) = 18 and (right(身份证号,17) like  '[0-9]'or right(身份证号,17) like 'x')
    

    11.如何设置区号由0-9之间的数字组成CONSTRAINT

    quhao CHECK (quhao  LIKE '[0-9][0-9][0-9]' 
    or quhao LIKE '[0-9][0-9][0-9][0-9]'
    or quhao LIKE '[0-9][0-9][0-9][0-9][0-9]'));
    

    解释:quhao LIKE '[0-9]…[0-9]'的号码由表示n位从0到9中的数组成。
    quhao LIKE ‘[0-9][0-9][0-9]’ 表示3位的区号,如北京010;
    quhao LIKE '[0-9][0-9][0-9][0-9]'表示4位的区号,如三门峡0398;
    quhao LIKE '[0-9][0-9][0-9][0-9][0-9]'表示5位的区号,如香港00852

    12.最后回复时间 TLastClickT 发贴时间 TTime最后回复时间 必须晚于 发贴时间 并且小于等于当前时间

    使用GetDate()函数获取当前时间
    设计表在TLastClickT上右击选择约束,新建,
    填入([TLastClickT] > [TTime] and [TLastClickT] < GetDate())
    或者TiastReply(回帖时间)大于Ttime(发帖时间)
    在创表的同时创建表的时候应该还没有回帖吧,为什么要用默认值?
    可以添加一个约束 
    alter table topic alter column add check(TlastReply is null or TlastReply > Ttime)
    

    13.定义前八位为数字或者 -一共是15位,为CHAR型

    alter table 表名add constraint chk check(字段 like'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%'),    
     constraint chklen check(len(字段)=15)    
    

    14.如何限制varchar字段不允许出现单引号的检查约束 !!!
    设表为TALBENAME,不能有引号的字段为FIELDNAME 则:

    ALTER TABLE tablename ADD CONSTRAINT CK_fieldname CHECK (not fieldname like '%''%')
    

    15.在表中的某列中通过检查约束,让其有某些固定的值

     check(sid like 'bd[0-9][0-9][0-9][0-9][0-9][0-9]')
         add const ck_num check(num like '[1][2] [4][_] [0-9][0-9] [0-9][a-z]')
    

    16.如何限制varchar字段不允许出现字符串的检查约束 !!!

    设表名为TABLENAME,VARCHAR类型的字段为VAR_FIELD.则有:
     ALTER TABLE [dbo].[TABLENAME] 
     ADD CONSTRAINT [CK_TABLENAME] 
     CHECK (isnumeric([VAR_FIELD]) = 1)
     这样,在VAR_FIELD只要出现字段一旦出现非数字内容就会报告错误。
    

    17.电话号码的格式必须为xxxx-xxxxxxxx或手机号11位

     alter 表名 add constraint ck_字段名 check (字段 like '[0-9][0-9][0-9][0-9]_[0-9]......' 
     or length(字段)=11)
    

    18.身份证号是18位且唯一的

     alter 表名 add constraint ck_字段名 check (len(字段名)=18 ),
     constraint uk_字段名 unique(字段名)
    
    展开全文
  • Oracle所有约束

    2016-04-05 17:12:02
    以下几种约束 、并 一一列举: 1.主键约束: 要对一个列加主键约束的话,这列就必须要满足的条件就是分空 ...alter table 表格名称 add constraint 约束名称 增加约束类型 (列名) 例子: alter table em
    以下几种约束 、并 一一列举:

    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)
    展开全文
  • ORACLE 约束

    2015-08-18 10:54:42
    如果不指定约束名 ,Oracle server 自动按照 SYS_Cn 的格式指定约束名 1:创建约束:建表的同时,修改约束:建表之后 2:可以在表级或列级定义约束 3:作用范围: ①列级约束只能作用在一个列上 ②表级约束
    什么是约束:
    约束是表级的强制规定;
    有以下五种约束:
    	NOT NULL
    	UNIQUE 
    	PRIMARY KEY
    	FOREIGN KEY
    	CHECK
    注意事项:
    如果不指定约束名 ,Oracle server 自动按照 SYS_Cn 的格式指定约束名
    1:创建约束:建表的同时,修改约束:建表之后
    2:可以在表级或列级定义约束
    3:作用范围:
    	①列级约束只能作用在一个列上
    	②表级约束可以作用在多个列上(当然表级约束也   
            可以作用在一个列上)
    4:定义方式:列约束必须跟在列的定义后面,表约束不与列一起,而是单独定义。
    5:非空(not null) 约束只能定义在列上
    
    案例:
    create table t_emp06
    (
        --列级约束
        id number(10) constraint emp06_id_nq unique,
        name varchar2(20) constraint emp06_name_nn not null,
        salary number(10,2),
        email  varchar2(20) ,
        --表级约束
        constraint emp06_email_uk unique(email)
    );
    --unique是可以为空的,只要保证唯一即可
    
    --主键的限制要求  唯一 和 非空
    create table t_emp07
    (
       id number(10) constraint emp07_id_pk primary key,
       name varchar2(20) constraint emp07_name_nn not null,
       salary number(10,2),
       email  varchar2(20)
    )
    drop table t_emp08;
    --外键
    create table t_emp08
    (
        id number(10),
        name varchar2(20) constraint emp08_name_nn not null,
        email varchar2(20),
        salary number(10,2),
        department_id number(10),
        --表级约束
        constraint emp08_email_uk unique(email),
        constraint emp08_id_pk primary key(id),
        constraint emp08_dept_id_fk foreign key(department_id) references departments(department_id)
    )
    
    
    create table t_emp08
    (
        id number(10),
        name varchar2(20) constraint emp08_name_nn not null,
        email varchar2(20),
        salary number(10,2),
        department_id number(10),
        --表级约束
        constraint emp08_email_uk unique(email),
        constraint emp08_id_pk primary key(id),
        constraint emp08_dept_id_fk foreign key(department_id) references departments(department_id)
    )
    
    
    
    --约束 : check
    create table t_emp09
    (
        id number(10),
        name varchar2(20) constraint emp09_name_nn not null,
        email varchar2(20),
        salary number(10,2) constraint emp09_sa_ck check(salary>1000 and salary<5000),
        department_id number(10),
        --表级约束
        constraint emp09_email_uk unique(email),
        constraint emp09_id_pk primary key(id),
        constraint emp09_dept_id_fk foreign key(department_id) references departments(department_id)
    )
    
    insert into t_emp09 values(11,'a','B@huawei.com',300,60);
    
    
    --在已有表中增加约束   只有not null约束时用的是 modify  其他都是add
    alter table t_emp03 modify(salary number(10,2) not null);
    alter table t_emp03 add constraint emp03_id_uk unique(id);
    --使约束失效  有效
    alter table t_emp03 disable constraint emp03_id_uk;
    alter table t_emp03 enable constraint emp03_id_uk;
    
    
    --删除约束
    alter table t_emp03 drop constraint emp03_name_nn;
    
    

    展开全文
  • oracle数据库约束

    2013-08-03 22:23:50
    oracle数据库约束 约束用于确保数据库数满足业务规则。 约束包括:NOT NULL,UNIQUE,PRIMARY KEY,FOREIGN KEY以及CHECK等5种类型。 建立主键约束和唯一约束时,Oralce会基于约束列自动建立唯一索引;...
  • Oracle Check约束用法详解

    千次阅读 2019-04-16 15:38:21
    CHECK约束指在表的列中增加额外的限制条件。 注: CHECK约束不能在VIEW中定义。 CHECK约束只能定义的列必须包含在所指定的表中。 CHECK约束不能包含子查询。 创建表时定义CHECK约束 3.1 语法: [sql] view plain c.....
  • Oracle约束

    2014-07-14 19:14:54
    数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则,在oracle中,数据完整性可以使用约束、触发器、应用程序(过程、函数)三种方法来实现,在这三种方法中,因为约束易于维护,并且具有最好的性能,所以作为...
  • Oracle约束

    2015-06-22 11:18:38
    oracle约束 一、维护数据的完整性 概述:数据的完整性用于确保...在Oracle中,数据完整性可以使用约束、触发器、应用程序(过程、函数)三种方法来实现,在这三种方法中,因为约束易于维护,并且具有最好的性能
  • oracle-约束

    2019-05-23 16:51:21
    1.定义: 约束是强加在表上的规则或条件。 2.约束的功能: 实现一些业务规则,防止无效的垃圾数据进入数据库。 维护数据库的完整性(完整性指正确性与一致性),从而使数据库的开发和维护都更加容易...增加:alter ta...
  • Oracle外键约束

    千次阅读 2019-07-14 20:30:26
    一、创建外键约束 两种方法 1.创建表时 create table 子表( id number, name varchar2(5), foreign key(id) references 父表(列名) ); 2.随时更改 alter table 子表 drop constraint 约束名; alter table ...
  • oracle复合约束

    2018-08-28 19:07:58
    – 复合约束 – 每个月的报表 – 2017 6 – 2018 6 – 2018 7 – 创建报告表 create table tb_repo ( year char(4), mon char(2), -- 将需要整合到一起作为符合约束的键放到一起设置约束 unique(year, ...
  • oracle 追加约束

    千次阅读 2015-05-10 20:21:35
    alter table *** add constraint *** 用法 1.主键约束: ...要对一个列加主键约束的话,这列就必须要满足的条件就是非空 ...因为主键约束:就是对一...alter table 表格名称 add constraint 约束名称 增加约束类型
  • 修改oracle数据库约束

    2017-06-01 10:07:46
    增加约束 ALTER TABLE tableName ADD [CONSTRAINT constraint]  type (column); //name变为唯一性约束 alter table insert_test2 add constraint test_name_uk unique(name) //删除约束 alter table ...
  • Oracle非空约束

    千次阅读 2017-11-22 11:38:37
    约束的作用 1、定义规则 2、确保完整性  二 非空约束 1、在创建表时设置非空约束 CREATE TABLE table_name( column_name datatype NOT NULL,... ); SQL> create table userinf_1 2(id number(6,0),...
  • oracle外键约束

    2018-08-28 19:06:40
    – 外键约束 – 格式:forign key(外键名) references 主表(参照列名) – 比如,我们想要使用 clazz_id 字段将 tb_clazz 表和 tb_stu 表联合起来 – clazz_id int references tb_clazz(id) – 外键是构建于一张...
  • oracle 约束

    2013-06-08 12:48:27
    Oracle中,数据完整性可以使用约束、触发器、应用程序(过程、函数)三种方法来实现,在这三种方法中,因为约束易于维护,并且具有最好的性能,所以作为维护数据完整性的首选。 1、约束 约束用于确保数据库...
  • Oracle check 约束

    2012-07-09 14:49:13
    看下面的例子: CREATE TABLE temp (age NUMBER(3)); ALTER TABLE temp ADD CONSTRAINT ck_temp_age CHECK  ((AGE>0) AND (AGE 现在我们能够插入Age表的集合...为限制Age字段取值范围不能为空,增加not null约束
  • Oracle 约束

    2012-08-13 19:51:54
    Oracle中,数据完整性可以使用约束、触发器、应用程序(过程、函数)三种方法来实现,在这三种方法中,因为约束易于维护,并且具有最好的性能,所以作为维护数据完整性的首选。 1、约束 约束用于确保数据库...
  • oracle约束

    2012-05-10 07:27:47
    数据完整性: 数据的完整性用于确保数据库数据遵守从一定的商业和逻辑规则,在oracle中,数据完整性可以使用约束,触发器,应用程序(存储过程,函数) 三种方法来实现,在这三种方法中,因为约束易于维护,并且...
  • ALTER TABLE TB_ZJGL_DWSB_GRMX ADD CONSTRAINT SFZH_UNIQUE UNIQUE(SFZH); ALTER TABLE TB_ZJGL_DWSB_GRMXDROP CONSTRAINT SFZH_UNIQUE; 转载于:https://www.cnblogs.com/rhxuza1993/p/7463186.html...
  • oracle 唯一约束

    2014-03-20 10:07:46
    alter table ktsys_organization add constraint org_code_unique unique(org_code); ...主键约束 ...2、增加新的 主键约束 alter table 表名 add constraint 主键名 primary key(字段名)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 44,395
精华内容 17,758
关键字:

oracle增加约束