ORACLE-修改表

版权声明:--------- 版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/wangxw1803/article/details/84790774

修改表列

使用alter table语句修改表列

  • 向表中添加新的列
  • 修改已经存在的列的类型或数据范围
  • 删除已经存在的列
  • 重命名表列

新增表列

可以使用如下alter table语句,在添加定义列时可以定义列属性,比如 not null 、unique 或check约束

alter table invoice_check ADD 
invoice_name varchar2(20) 
check (length(invoice_name) <=8 );

修改表列

使用alter table 可以对现有表已经存在的列进行修改,但是这个功能小心使用,Oracle不允许可能会导致数据丢失的任何更改。
注:应在DBA许可下,在测试环境中测试好后才能在生产环境中更改

删除表列

使用alter table 的drop column语法可以将一个已存在的列删除。

ALTER TABLE INVOICE_CHECK DROP COLUMN INVOICE_NAME;

上面的代码将删除invoice_check表中的invoice_name 字段,无论其中是否有值。

重命名表列

-使用alter table语句,可对现有的数据表的列重新命名,通过rename column关键字,可以将一个字段名称重命名为指定的目标字段名称

ALTER TABLE INVOICE_CHECK 
RENAME COLUMN INVOICE_NAME 
TO INVOICE_NAME_SHORT;

修改约束

使用alter table 语句可以修改约束的操作

  • 向表中添加一个新的约束
  • 移除表中现有的约束
  • 启用或禁用约束

添加约束

ALTER TABLE INVOICE_CHECK 
ADD CONSTRAINT INVOICE_CHECK_PK 
PRIMARY KEY (INVOICE_ID);

ADD CONSTRAINT 有一个DISABLE关键字,如果不指定改关键字,那么在创建的约束后将启用约束,可以通过使用该关键字来创建一个未被启用的约束。
当向invoice_check表中添加约束而不指定DISABLE时,oracle会提示异常。如果指定DISABLE,可以看到约束已经被成功添加。

ALTER TABLE INVOICE_CHECK 
ADD CONSTRAINT INVICE_CHECK_UN 
UNIQUE (INVOICE_NAME) DISABLE;

由于该约束别禁用,其效果好像该约束不存在一样,仍然可以插入重复的值
常见的使用alter语句添加约束的语法

--添加检查约束
ALTER TABLE INVOICE_CHECK_OTHERS
ADD CONSTRAINT INVOICE_TOTAL_CK 
CHECK (INVOICE_TOTAL >= 1)DISABLE;

--添加外键约束
ALTER TABLE INVOICE_CHECK_OTHERS
ADDCONSTRAINT INVOICE_FK_VENDORS
FOREIGN KEY (VENDOR_ID) REFERENCES
VENDORS (VENDOR_ID);

--添加NOT NULL约束
ALTER TABLE VENDORS
ADD CONSTRAINT VENDOR_VENDOR_NAME_NN
NOT NULL;

删除约束

ALTER TABLE INVOICE_CHECK 
DROP CONSTRAINT INVOICE_CHECK_NN;

启用或禁用约束

  • 使用DISABLE关键字禁用约束
ALTER TABLE INVOICE_CHECK
ENABLE CONSTRAINT INVOICE_CHECK_NN;
--执行这行语句时,Oracle会抛出异常  
--找到重复关键字

这是因为当启用一个约束是,默认情况下会对已经存在的记录进行检查,因为默认情况下ENABLE关键字会是哟个VALIDATE作为约束检查条件,所以如果不匹配约束的条件,将抛出异常。
oracle提供了NOVALIDATE关键字,允许仅对新的记录应用约束,而不对原有的记录进行检查。但是对于UNIQUE和PRIMARY KEY 约束,要使用NOVALIDATE关键字

--移除UNIQUE约束
ALTER TABLE INVOICE_CHECK
DROP CONSTRAINT INVOICE_CHECK_NN;

--使用DEFERRABLE关键字增强一个被禁用的约束
ALTER TABLE INVOICE_CHECK ADD CONSTRAINT
INVOICE_CHECK_NN UNIQUE(INVOICE_NAME)
DEFERRABLE DISABLE;

--启用约束,对于已存在的记录不进行验证
ALTER TABLE INVOICE_CHECK ENABLE NOVALIDATE
CONSTRAINT INVOICE_CHECK_NN;

当使用了NOVALIDATE 关键字后,可以看到现在已经成功启用约束,如果向invoice_check表的invoice_name列插入已经存在的记录,例如

INSERT INTO INVOICE_CHECK VALUES (5,300,400,'Demo2');
--会出现 :违反唯一约束条件错误

如果要禁用一个现有的约束,可以使用DISABLE关键字,也可以在DISABLE关键字后面使用VALIDATE和NOVALIDATE关键字,其作用分别如下:

  • DISABLE VALIDATE:禁用约束,对已存在的记录进行验证
  • DISABLE NOVALIDATE:禁用约束,不验证已存在的记录

猜你喜欢

转载自blog.csdn.net/wangxw1803/article/details/84790774