(6)管理约束【Oracle】

一、Node

1、数据完整性

1.1、实体完整性(Entity Integrity)
  • 关系型数据库表中的一条记录就是一个关系

  • 一条记录由多个不同的域组成,多个域组合在一起构成元组(元组不一定要包括所有域,比如我们查询时可以只查一列,这几列也算一个元组一条记录表中的一行数据)

  • 关系的主键(Primary Key)是唯一的标识一个元组的,把每个元组区分开

  • 主键的各个属性都不能为空值

    • 这里的属性即元组中的域(即主键涉及的列)
    • 所谓空,不是指NULL,也不是’’,而是未知的、不确定的、没有意义的
  • 实体完整性:把表中的每行看作一个实体,它要求所有行都具有唯一性

  • 实体完整性约束:若属性(或属性组)A是基本关系R的主属性(主键),则A不能取空值

  • 实体完整性约束 是针对基本关系而言的,一个基本关系通常对应现实世界的一个实体集,例如学生关系对应于学生;现实中的实体是可区分的,即它们具有某种唯一性标识,例如每个学生都是独立的个体;关系模型中以主键作为唯一标识,如果主属性为空,则说明存在某个不可标识的实体,存在某个不可区分的实体,这与“现实世界的实体可区分”矛盾,因此这个规则就称为实体完整性

1.2、参照完整性(Referential Integrity)
  • 外键(Foreign Key)

    • 设 F 是 R表中的一个非主键列(如学生表中的专业号)
    • 设 P 是S表中的主键(比如专业表中的专业号)
    • 如果 R表中的每行数据的 F列恰好与 S表中的P列对应,则称 R表中的 F为外键
    • 此时,称R表为 参照表(依赖关系),称S表为 被参照表(参照关系);
  • 外键要么取值为空,要么等于被参照关系中的主键,即关系的外键必须是另一个关系主键的有效值或者是空值

  • 现实世界中的实体之间往往存在着某种联系,在关系模型中实体及实体间的联系都是用关系来描述的,自然也就存在着关系与关系间的引用

  • 参照完整性是不同关系之间或同一关系的不同元组之间的一种约束

  • 参照完整性:维持被参照表和参照表之间的数据一致性

  • 注意

    • 外键和相应的主键可以不同名,只要定义在相同的域上即可
    • 外键的取值是否为空,视具体情况而定。如果外键是相应主键的属性(一个关系的一个列作为主键的同时也作为外键),则不允许外键的值为空;即若一个列是外键,同时也是关系的主属性(主键),那按照实体完整性约束,这个列不能取空值,只能取被参照表助中已经存在的主键值
1.3、域完整性(Domain Integrity)
  • 域完整性是指某行数据某个列的值域的完整性

    • 数据类型

    • 格式

      • 小数/浮点数;定长/非定长
      • 例:选修关系SC中表DOM的域GRADE是0~100整数范围时,若某学生成绩为76.5或105,则破坏了域完整性约束
    • 值域范围

    • 是否允许空值

      • NULL用于说明在数据库中某些属性值可能是未知的
    • 是否允许使用某些特殊值

  • 跟非空、唯一、检查、缺省约束有关,这些约束可保证域完整性

  • 属性(属性组)的取值必须满足当前属性(属性组)上已经定义的约束条件

  • 域完整性:要求表中指定列的数据具有正确的数据类型、格式和有效的数据范围

1.4、用户自定义的完整性(User-Defined Integrity)
  • 可能通过 检查约束 来实现 或借助于 触发器 来实现

  • 属性(或属性组)的取值应当满足用户自定义的约束条件

    • 这个条件可能是用户在java程序或PL/SQL中要求的
    • 用户写了套自己的程序,要求某数据必须满足某条件

2、约束分类

2.1、非空约束(Not NULL)
  • 建表时建约束

    • CREATE TABLE 表名(
      ...
      列名  类型(宽度)  [CONSTRAINT 约束名]  NOT NULL,
      ...
      )
      
  • 建表后为列追加约束

    • ALTER TABLE 表名 MODIFY ( 列名 [CONSTRAINT 约束名] NOT NULL ) ;
    • 错误写法:ALTER TABLE 表名 ADD CONSTRAINT 约束名 NOT NULL(列名) ;
2.2、唯一约束(Unique Key)
  • 唯一性约束用于限制非主键列上的数据唯一性,一个表可放多个唯一性约束,唯一性约束可以用于允许空值的列,其他数据不允许重复放

  • MySQL中认为null不可重复,Oracle中认为 空 和 空 不相等;因此,就算列加了唯一性约束,也可有多行id为空,不会报错(可多次插入NULL , 实际在数据库中存储为 空 )

  • 建表时建约束

    • CREATE TABLE 表名(
      ...
      列名  类型(宽度)  [CONSTRAINT 约束名]  UNIQUE,
      ...
      )
      
  • 建表后为列追加约束

    • ALTER TABLE 表名 MODIFY ( 列名 [CONSTRAINT 约束名] UNIQUE ) ;
  • 可以去掉modify后的 ()

    • ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(列名) ;
2.3、主键约束(Primary Key)
  • 1.来自课本定义

    • 超键

      • 在一个关系中,能唯一标识元组的属性或属性组称为关系的超键。例:属性组K={sno,college},K可以唯一标识学生记录,但K只能是关系的超键,不能作为候选键,因为college是一个多余属性,只用sno可以唯一标识学生记录,因此sno是一个候选键
    • 候选键

      • 如果一个属性组能唯一标识元组,且又不含有多余的属性,那么这个属性组称为关系的候选键,关系的候选键可以有一个或多个,选用一个作为元组的唯一标识(主键)即可
    • 主键

      • 如果一个关系中由多个候选键,选其中的一个候选键为关系的主键,用主键实现关系定义中的 “表中任意两个元组(行)不能相同” 的约束
  • 2.主键

    • 主键用于唯一地标识表中的每行数据,数据不能重复,不能为空,主键默认非空且唯一

    • 一个表或视图有且只有一个主键

    • 但一个主键可以涉及多个列,此时主键称作联合主键,此时主键还是只有一个

      • 行级约束:主键只有一个列
      • 表级约束:主键由两个或两个以上的列组成
    • 创建主键或唯一约束后,ORACLE会自动创建一个与约束同名的索引(UNIQUENES为UNIQUE唯一索引)

  • 3.联合主键

    • 主键由多个列组成,为表级约束
  • 4.建表时建约束

    • CREATE TABLE 表名(
      ...
      列名  类型(宽度)  [CONSTRAINT 约束名]  PRIMARY KEY,
      ...
      )
      
    • CREATE TABLE 表名(
      ...
      [CONSTRAINT 约束名]  PRIMARY KEY( 列名 [ ,列名 , ... ] ),
      ...
      )
      
  • 5.建表后为列追加约束

    • ALTER TABLE 表名 MODIFY ( 列名 [CONSTRAINT 约束名] PRIMARY KEY ) ;

      • alter table … modify(…); 可以去掉modify后的 ()
    • ALTER TABLE 表名 ADD [CONSTRAINT 约束名] PRIMARY KEY(列名 [ ,列名 , ... ]) ;

      • alter table … add … primary key(…); 建议使用
      • 若为多个列,则此时不是有多个主键,而是有一个联合主键,这几个列的主键约束名相同,且这几列都不能为空,列联合的记录中只要一个主键值不同即为不重复,即允许单个列的属性值重复
自动增长
  • 1、概念:如果某一列是数值类型的,可使用 auto_increment 完成自动增长,自动增长是参照上一条记录的值进行增长
  • 2、在创建表时,添加主键约束,并完成自动增长
    create table stu(
     		id int primary key auto_increment,
     		name varchat(20)
     );
     -- 插入数据
     insert into stu values(1,'a');
     insert into stu values(null,'b'); -- 表中id值为2
     insert into stu values(10,'c');
     insert into stu values(null,'d'); -- 表中id值不是3,而是11
    
  • 3、删除自动增长
    alter table stu modify id int ;
  • 4、建表后添加自动增长
    alter table stu modify id int auto_increment;
2.4、外键约束(Foreign Key)
  • 外键(主表引用的外键值可以为Null,不可以为从表中没有的值)

    • 外键用来维护从表(Child Table)和主表(Parent Table)之间的引用完整性
    • 一方面能够维护数据库的数据一致性,数据的完整性;防止错误的垃圾数据入库
    • 另外一方面它会增加表插入、更新等SQL性能的额外开销
    • 不少系统里面通过业务逻辑控制来取消外键约束。例如在数据仓库中,就推荐禁用外键约束
  • 建表时建约束(只写一个列名)

    • CREATE TABLE 参照表表名(
      ...
      [CONSTRAINT 约束名]  FOREIGN KEY( 列名 ) REFERENCES 被参照表表名( 被参照表主键列名 ) ,
      ...
      )
      
  • 建表后添加外键,设置级联更新

    • alter table stu add constraint stu_fk foreign key(id) references person(id) on updage cascade;
    • 当从表中的id值改变,主表中对应的id也会改变
    • 如果不设置级联更新也想达到此效果,则需要先把主表中id设为null,这时才可以更改修改从表id为想要修改的值,并且再手动修改主表中id为null的值与从表id保持一致
  • 建表后为列追加约束

    • ALTER TABLE 参照表表名                                                                ADD  [CONSTRAINT 约束名]  FOREIGN KEY( 列名 )  REFERENCES  被参照表表名( 被参照表主键列名 )                           
      [ON DELETE CASCADE|SET NULL] ;
      
  • ON DELETE SET NULL

    • 当主表中的一行数据被删除时,Oracle系统会自动地将所有从表中依赖于主表的数据记录的外键改成空值
  • ON DELETE CASCADE

    • 当主表中的一行数据被删除时,Oracle系统会自动地将所有从表中依赖于主表的数据记录删除
2.5、缺省约束(Default)
  • 默认值

    • 每个列都有默认值(默认都是NULL,日期类型默认是系统时间)
    • 若期望某个列有特定的默认值,可以使用 DEFAULT 约束 来设置
    • Oracle的DEFAULT约束不需要 约束名,也不需要 约束关键字,否则报错
    • 数据字典里也不会显示 缺省约束 的约束名
  • 建表时建约束

    • CREATE TABLE 表名(
      ...
      列名  类型(宽度)  DEFAULT  默认值,
      ...
      )
      
  • 建表后为列追加约束

    • ALTER TABLE 表名 MODIFY ( 列名 DEFAULT 默认值 ) ;

    • ALTER TABLE 表名 MODIFY 列名 DEFAULT 默认值 ;

      • 可以去掉modify后的 ()
2.6、检查约束|条件约束(Check)
  • 检查约束检查的是一个属性或属性组,从逻辑表达式判断数据的有效性

  • 表中每行都要满足该约束条件;条件约束既可以在表一级定义也可以在列一级定义;在一列上可以定义任意多个条件约束

  • 一张表只能有一个检查约束

  • 添加检查约束时,表中已经存在的数据如果不满足检查约束对应的表达式,则此时会添加失败

  • 不是所有的数据库都支持检查约束

    • Oracle支持检查约束
    • MySQL不支持检查约束
  • 建表时建约束

    • CREATE TABLE 表名(
      ...
      [ CONSTRAINT 约束名称 ]  CHECK( 表达式 ) ,
      ...
      )
      
    • 表达式里可用 and 连接符,连接多个列的条件

    • 例:CHECK(id > 9999 AND length(name) > 5) ;

      • 这里的length计算的是字符数,不是字节数
      • id列和name列的check约束名相同
  • 建表后为列追加约束

    • ALTER TABLE 表名 ADD [ CONSTRAINT 约束名 ] CHECK( 表达式 ) ;

3、管理约束

3.1、约束名
  • 建议用【 表名列名约束类型 】形式命名,如果代码中约束名小写,则当存入系统时仍然会变大写
  • 若不显式指定约束名,则由系统创建约束名:【SYS_C+数字 】,这样的约束名可读性差
  • 约束名最好不要超过30字节
3.2、查看约束
  • 属于当前用户的约束的表:user_constraints
    表中字段:
    • owner表示用户名
    • table_name表示表名
    • constaint_name表示约束名
    • constraint_type表示约束类型,如P,U,R,C
  • 表中各个列上存在的约束信息(写明属于哪个表哪个列的哪个约束):user_cons_columns
    表中字段:
    • table_name表示表名
    • column_name表示列名
    • constraint_name表示约束名
    • constraint_type表示约束类型
  • 属于当前用户的对象表:user_objects
  • 这三个都是数据字典,记录了约束名和表名
  • 注意,缺省约束在 user_constraints 和 user_cons_columns 中是查询不到的
3.3、修改约束名
  • 在约束名称中应该尽量使用指定的前缀或后缀来明确约束类型

    • pk:primary key,表示主键约束

      • P
    • uk:unique key,表示唯一约束

      • U
    • fk:foreign key,表示外键约束

      • R (Reference)
    • nn:not null,表示非空约束

      • C (普通约束)
    • ck:check,表示检查约束

  • 用法

    • ALTER TABLE 表名 RENAME CONSTRAINT 原约束名 TO 新约束名 ;
3.4、禁用/启用约束
  • 禁用约束

    • ALTER TABLE 表名 DISABLE CONSTRAINT 约束名 [CASCADE] ;
  • 参数CASCADE子句用来关闭存在有完整性关系的约束

    • 比如DISABLE一个主键,如果没有CASCADE子句就会出错,此时使用CASCADE子句DISABLE主键可以将该主键与相关外键一起DISABLE掉
    • 例如在数据库系统中大规模装入数据时,为了系统的效率您不得不牺牲数据的一致性来关闭一些约束,甚至删除一些约束将主表主键禁止的同时,也将禁止依赖于此主键的外键禁止了
  • 启用约束

    • ALTER TABLE 表名 ENABLE CONSTRAINT 约束名 ;

      • 如果关闭主键约束时使用了CASCADE,此时使用ENABLE不会将主键约束与外键约束同时打开,只能对主键约束与外键约束分别使用ENABLE CONSTRAINT 子句打开
      • 如果期望重新启用检查约束,则需要保证数据库表中的数据都满足检查原来检查约束对应的表达式
3.5、删除约束
  • 使用约束名删除

    • 这是通用的删除约束的方法(除了 DEFAULT 约束 不适用之外:缺省约束无法删除)
    • ALTER TABLE 表名 DROP CONSTRAINT 约束名 ;
  • 不使用约束名

    • 1、缺省约束

      • 使用指定的默认值(修改oracle指定的原默认值-空)

        • ALTER TABLE 表名 MODIFY( 列名 DEFAULT 默认值 ) ;
      • 指定默认值为NULL,取反删除

        • ALTER TABLE 表名 MODIFY( 列名 DEFALUT NULL ) ;
    • 2、非空约束

      • 添加非空约束

        • ALTER TABLE 表名 MODIFY( 列名 NOT NULL );
  • 可以去掉modify后的 ()

  • 删除非空约束

    • ALTER TABLE 表名 MODIFY( 列名 NULL ) ;

      • 可以去掉modify后的 ()
    • 3、唯一约束

      • ALTER TABLE 表名 DROP UNIQUE( 列名 ) ;
    • 4、主键约束

      • ALTER TABLE 表名 DROP PRIMARY KEY [CASCADE] ;

      • 若一个表就一个主键,则删除主键时可不指定主键名

      • 若有其它表关联了本表的主键,则用cascade级联删除,把其它表的外键的数据一起删除

3.6、推迟约束
3.7、约束有四种状态

ENABLEVALIDINVALIDDISABLE

4、注意

一个列可添加多个约束;同一约束可对应多个列(如主键约束、检查约束)

二、Code

1、管理约束:查看约束信息/删除约束

  • 与约束有关的数据字典user_constraints

    • 查看属于当前用户的约束

    • DESC user_constraints ;

    • SELECT owner , table_name , constraint_name , constraint_type FROM user_constraints ;

    • 修改 owner 、table_name 的显示格式

      • COLUMN owner FORMAT a10 ;
      • COLUMN table_name FORMAT a20 ;
  • 与约束有关的数据字典user_cons_columns():

    • 查看表中各个列上存在的约束信息

    • 设置 linesize:set linesize 120 ;

    • 设置 owner 、table_name 、column_name 的显示格式

      • COLUMN owner FORMAT a10 ;
    • SELECT owner , table_name , column_name , constraint_name FROM user_cons_columns ;

  • 可以根据约束名称删除约束,比如删除 myemp 表中的约束可以使用

    • ALTER TABLE myemp DROP CONSTRAINT SYS_C0010885 ;

2、维护约束条件:非空约束/唯一约束/缺省约束

  • 1、创建表时指定 非空(Not Null)约束 、惟一(Unique)约束、缺省约束(Default),并显式指定约束名称(如果未显式指定约束名称,则 Oracle DBMS会自动为约束设置名,这些名称前缀是 【SYS_C】

    • CREATE TABLE t_customers (
         id NUMBER(10) CONSTRAINT t_customers_id_uk UNIQUE ,
         name VARCHAR2(50) CONSTRAINT t_customers_name_nn NOT NULL ,
         birthdate DATE DEFAULT current_date
      );
      
  • 2、在建表后,为表的某个列追加约束

    • ALTER TABLE t_customers MODIFY ( name CONSTRAINT t_customers_name_nn NOT NULL ) ;
      
  • 查看 t_customers 各个列上存在的约束信息

    • SELECT table_name , column_name , constraint_name, constraint_type FROM user_cons_columns WHERE lower( table_name ) = 't_customers' ;
      
    • 注意,缺省约束在 user_constraints 和 user_cons_columns 中是查询不到的

    • 日期类型默认是系统时间

      • SQL> INSERT INTO t_customers ( id , name , birthdate ) VALUES ( null , '李小龙' , default );
        SQL> -- DATE类型的列插入数据为default或者用空
        SQL> INSERT INTO t_customers ( id , name ) VALUES ( null , '叶准 ' ) ;
        -- 查询结果为:
        SQL> SELECT * FROM t_customers ;
        ID         NAME                 BIRTHDATE                      
        ---------- -------------------- -------------------                                         
                   李小龙               2020-06-21 14:54:50  
                   叶准                 2020-06-21 14:56:27
        
  • 测试 sysdate 和 current_date(其实有差别)

    • SQL> SELECT sysdate , current_date FROM dual ;
      
      SYSDATE             CURRENT_DATE                               
      ------------------- -------------------                       
      2020-06-21 14:57:03 2020-06-21 14:57:03       
      
  • id是唯一性约束,但为什么 在 id 列的不同行可以有多个 空值 ?

    • 因为在 Oracle 认为 空 和 空 是不相等的,是不可以比较的
    • 因此 id 列在多行都为 空 时并不构成重复,所以不违反 唯一性约束
    • 其他数据库未必是这么处理的( 比如 MySQL )
  • 1、 删除 t_customers 表上的唯一约束

    • 通过 约束名称:ALTER TABLE t_customers DROP CONSTRAINT t_customers_id_uk ;

    • 不通过 约束名称::ALTER TABLE t_customers DROP UNIQUE( id ) ;

    • ALTER TABLE t_customers MODIFY ( id NOT UNIQUE ); 错误!

  • 2、为某表的某个列去除非空约束(不通过 约束名称)

    • ALTER TABLE t_customers MODIFY ( name NULL ); 正确
  • ALTER TABLE t_customers ADD CONSTRAINT t_customers_name_nn name NOT NULL ; 错误!

  • 截断表:TRUNCATE TABLE t_customers ;

3、维护约束条件:主键约束/联合主键

  • 1、建表时,指定主键约束(在列末尾指定主键约束)

    • CREATE TABLE t_classes (           
          id NUMBER(5) CONSTRAINT t_classes_id_pk PRIMARY KEY ,
          name VARCHAR2(30) CONSTRAINT t_classes_name_nn NOT NULL
      );
      
  • 2、建表时,指定主键约束(不在列末尾指定主键约束,单独指定主键约束)

    • CREATE TABLE t_teachers (
       id NUMBER(5) ,
       name VARCHAR2(50) CONSTRAINT t_teachers_name_nn NOT NULL ,
       CONSTRAINT t_teachers_id_pk PRIMARY KEY( id )
      );
      
  • 3、建表后,添加主键约束

    • CREATE TABLE t_products (
        id NUMBER(10) ,
        name VARCHAR2(50) ,
        price NUMBER(7,2)
      );
      -- 通过 ALTER TABLE ... MODIFY ... 来实现
      ALTER TABLE t_products MODIFY ( id CONSTRAINT t_products_id_pk PRIMARY KEY ) ;
      -- 通过 ALTER TABLE ... ADD ... PRIMARY KYE ( ....)
      ALTER TABLE t_products ADD CONSTRAINT pk_id_t_products PRIMARY KEY ( id ) ;
      
  • 4、查看约束

    • SELECT table_name , column_name , constraint_name FROM user_cons_columns WHERE lower(table_name)='t_classes';
      
  • 5、主键都是 非空 且 惟一的

  • 6、删除主键约束

    • -- 通过约束名
      ALTER TABLE t_products DROP CONSTRAINT t_products_id_pk ;
      
    • -- 通过 ALTER TABLE ... DROP ... 
      ALTER TABLE t_products DROP CONSTRAINT pk_id_t_products ;
      
  • 7、在 学生成绩表 中使用联合主键

    • CREATE TABLE t_scores (
        student_id VARCHAR2(5) ,
        course_id VARCHAR2(5) ,
        exam_time DATE ,
        score NUMBER(4,1) ,
        CONSTRAINT t_scores_pk PRIMARY KEY ( student_id , course_id , exam_time )
      );
      
    • 联合主键的约束名相同

    • 联合主键中有一个属性值不同,即为不同的联合主键,即联合主键的单个列可以重复

4、维护约束条件:外键约束

  • 创建 被参照表

    • CREATE TABLE t_majors (
       id NUMBER(5) ,
       name VARCHAR2(50) ,
       CONSTRAINT t_majors_id_pk PRIMARY KEY( id )
      );
      
  • 创建 参照表

    • CREATE TABLE t_students (
       id NUMBER(10) ,
       name VARCHAR2(50) ,
       gender VARCHAR2(6) ,
       birthdate DATE ,
       major NUMBER(5) ,
       CONSTRAINT t_students_id_pk PRIMARY KEY( id ) ,
       CONSTRAINT t_students_major_fk FOREIGN KEY ( major ) REFERENCES t_majors( id )
        9  );
      
  • 外键要么取值为空,要么等于被参照关系中的主键

  • 首先在专业表中批量插入数据

    • INSERT ALL
        INTO t_majors VALUES ( 1001 , '软件工程' )
        INTO t_majors ( id , name ) VALUES ( 1002 , '土木工程' )
        INTO t_majors ( name , id ) VALUES ( '环境工程' , 1003 )
      SELECT * FROM dual ;
      
      -- select * from dual ; 是为了凑一个查询语句,选用dual表是因为dual表只有一行数据,因此插入语句就执行一次
      
  • 之后测试:为 参照表 插入数据 ( 也就是在 t_students 表中插入数据 )

    • 成功:INSERT INTO t_students ( id , name , major ) VALUES ( 1 , '张三丰' , 1001 ) ;
    • 成功:INSERT INTO t_students ( id , name , major ) VALUES ( 3 , '叶老师' , null ) ;
    • 失败:INSERT INTO t_students ( id , name , major ) VALUES ( 3 , '叶老师' , 5005 ) ;
      • 第 1 行出现错误:
        ORA-02291: 违反完整约束条件 (ECUTER.T_STUDENTS_MAJOR_FK) - 未找到父项关键字

5、维护约束条件:删除约束/修改约束名/禁用约束/启用约束

  • 查询 t_students 表中的约束
    • desc user_constraints ;
    • desc user_cons_columns ;
  • 导入设置格式脚本
    • start format.sql
  • 修改约束名称
    • ALTER TABLE t_students RENAME CONSTRAINT t_students_id_pk TO pk_t_students_id ;
  • 不使用约束名删除主键约束
    • ALTER TABLE t_students DROP PRIMARY KEY ;
  • 不使用约束名删除外键约束(错误)
    • ALTER TABLE t_students DROP FOREIGN KEY( major ) ;,出现错误
    • 可见使用约束名采用 DROP FOREIGN KEY 方式无法删除外键约束
  • 建表后指定检查约束
    • 添加检查约束时,表中已经存在的数据如果不满足检查约束对应的表达式,此时会添加失败
    • ALTER TABLE t_customers ADD CONSTRAINT t_customers_id_name_ck CHECK ( id > 9999 and length(name) > 5 );
    • 选择禁用约束后再插入那些违反检查约束的数据
      • ALTER TABLE t_customers DISABLE CONSTRAINT t_customers_id_name_ck ;
      • 注意,禁用约束后,检查约束还是在的,只是不起作用
    • 如果期望重新启用检查约束,则首先需要保证数据库表中的数据都满足检查约束对应的表达式
    • 重新启用被禁用的约束
      • ALTER TABLE t_customers ENABLE CONSTRAINT t_customers_id_name_ck ;
  • 提交事务
    • 让以前所做 DML 操作 ( INSERT 、 UPDATE、DELETE ) 最终生效
    • commit ;

6、用于设置SQL*Plus查询格式的SQL脚本

  • 用途1:此脚本可便于规范 user_cons_columns 的列格式;
  • 用途2:此脚本可便于规范 其他有这几列 的列格式;
  • 在oracle数据库中,用 start format.sql@ format.sql 来执行此脚本

format.sql:

-- linesize

SET linesize 120 ;

-- user_objects

COLUMN object_name FORMAT a20 ;

-- user_cons_columns / user_constraints

COLUMN table_name FORMAT a20 ;

COLUMN column_name FORMAT a20 ;

COLUMN constraint_name FORMAT a30 ;

COLUMN owner FORMAT a10 ;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值