oracle 查看表结构约束,oracle 约束

约束是表中列的属性,用来维护数据结构完整性的一种手段

约束的种类:

NOT NULL

UNIQUE

PARIAMRY KEY

FOREIGN KEY

CHECK

enble validate 检查现有数据和新数据是否符合约束

enable novlidate 检查新数据是否符合约束

disable validate 给表加锁

disable novalidate

创建表的时候带有约束信息:

create table e (empno number(4) constraint pk_e_empno(约束名) primary key,

ename varchar2(10) not null, not null只能在列级别

email varchar2(30),

constraint uk_e_email unique (email)); 约束写在后面为表级别约束,要指定列名

查看约束信息:

select constraint_name,

constraint_type,

SEARCH_CONDITION,

R_CONSTRAINT_NAME

from user_constraints

where table_name='E';

select constraint_name,column_name from user_cons_columns

where table_name='E';

添加约束:

alter table e add (sal number(7,2),deptno number(2));

alter table e add constraint ck_e_sal check (sal>999 and sal is not null);

alter table e add constraint fk_e_deptno foreign key(deptno) references dept (deptno);

注意:not null 约束只能在列级别指定不能在表级别指定!

alter table e modify (ename varchar2(10) constraint nn_e_ename not null);

select table_name,constraint_type from user_constraints where constraint_name='PK_DEPT';

select table_name,column_name from user_cons_columns

where constraint_name='PK_DEPT';

insert into e values (1,'X1','x1@uplooking.com',1000,10);

insert into e values (2,'X2','x2@uplooking.com',2000,20);

insert into e values (3,'X3','x3@uplooking.com',2000,40);

commit;

测试数据依赖关系:

delete dept where deptno=40;

删除约束:

alter table e drop constraint fk_e_deptno;

外键约束的两种特殊情况(主键删除有级联)

alter table e add constraint fk_e_deptno foreign key(deptno) references dept (deptno) on delete set null;

alter table e add constraint fk_e_deptno foreign key(deptno) references dept (deptno) on delete cascade;

约束的状态:

select constraint_name,

status

from user_constraints

where table_name='E';

禁止约束:

alter table e modify constraint UK_E_EMAIL disable;

启用约束:

alter table e modify constraint UK_E_EMAIL enable;

删除外键,重新建立父子关系(子表为e,父表为d,d表拷贝dept表数据):

alter table e drop constraint fk_e_deptno;

create table d as select * from dept;

alter table d add constraint pk_d_deptno primary key (deptno);

alter table e add constraint fk_e_deptno foreign key(deptno) references d (deptno);

父子关系建立后对父表结构修改的影响:

alter table d drop (deptno);

ORA-12992: cannot drop parent key column

强制删除父表主键:

alter table d drop (deptno) cascade constraints;

Oracle数据库中,修改结构的非空约束通常涉及到给一个已经存在的列添加非空约束,或者修改现有列的非空约束。以下是如何进行这些操作的基本步骤: 1. **添加非空约束**: 如果你想要给一个未设置非空约束的列添加非空约束,可以使用`ALTER TABLE`命令结合`MODIFY`或者`ALTER COLUMN`选项。例如,如果有一个名为`my_table`的和一个名为`my_column`的列,你可以这样做: ```sql ALTER TABLE my_table MODIFY (my_column NOT NULL); ``` 或者使用`ALTER COLUMN`: ```sql ALTER TABLE my_table ALTER COLUMN my_column SET NOT NULL; ``` 2. **修改非空约束**: 如果你已经给列添加了非空约束,但想要修改这个约束,例如更改列的数据类型或长度,首先需要删除现有的非空约束,然后再添加新的非空约束。这通常涉及到以下步骤: a. 删除现有非空约束(如果有的话): ```sql ALTER TABLE my_table MODIFY (my_column NULL); ``` b. 修改列的数据类型或长度(如果需要): ```sql ALTER TABLE my_table MODIFY (my_column 数据类型); ``` c. 重新添加非空约束: ```sql ALTER TABLE my_table MODIFY (my_column NOT NULL); ``` 请注意,在修改列的数据类型或长度之前删除非空约束,以及之后重新添加非空约束,是为了避免可能的约束冲突或者操作失败。 在执行这些操作时,需要确保在操作过程中,列中没有空值(对于原先是可空的列),否则修改会失败。如果中的数据不允许为空值,但目前存在空值,你需要先填充这些空值或处理这些记录,然后再进行修改。 此外,在修改结构时,出于对现有业务逻辑和应用程序兼容性的考虑,应该谨慎操作。必要时,进行数据备份和测试以确保修改后的结构不会影响数据的完整性和应用程序的正常运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值