重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这个用外键关联自己表的主键最理想!
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、成都小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了杭锦免费建站欢迎大家使用!
建表如下!这样建的表就满足你的要求,适用于客户和推荐人
create table emp1(
empno number(4) constraint emp1_empno_pk primary key,
mgr number(4) constraint emp1_mgr_fk emp1(empno)
);
一、Oracle数据库:禁用约束基本语法:alter table 数据库表名 disable constraint 约束名 假设现在需要关闭pub_organ的外键约束:1、 首先查询pub_organ存在哪些外键约束,此时需要用到oracle的字典表user_constraints。select * from user_constraints where table_name='PUB_ORGAN'; 上图就是查询结果,其中各字段含义如下:OWNER: 表的所有者CONSTRAINT_NAME: 约束名称CONSTRAINT_TYPE: 约束类型(R代表外键,P代表主键,C代表check约束)TABLE_NAME: 表名称SEARCH_CONDITION: check约束的具体信息STATUS: ENABLED表示当前约束是启用的,DISABLED表示当前约束未启用。2、 查询出表存在哪些约束后,即可以通过alter语句启用或禁用指定的约束了。如禁用pub_organ表的外键PUBORGAN_FK1,则可以使用如下命令实现:alter table PUB_ORGAN disable constraint PUBORGAN_FK1;执行后,再次查询字典表user_constraints,如下: 此时往数据库表pub_organ中插入数据时就不再受外键约束的影响了。 启用约束基本语法:alter table 数据库表名 enable constraint 约束名 如现在需要重新启用pub_organ的外键约束,可以使用如下命令:alter table PUB_ORGAN enable constraint PUBORGAN_FK1;二、DB2数据库:禁用约束基本语法:ALTER TABLE 表名称 ALTER FOREIGN KEY 约束名称 NOT ENFORCED 启用约束基本语法:ALTER TABLE 表名称 ALTER FOREIGN KEY 约束名称 ENFORCED 相关字典表:SYSIBM.SYSTABCONST如:select * from SYSIBM.SYSTABCONST where tbname='PUB_ORGAN'; 各字段含义如下:NAME: 约束名称DEFINER: 定义者CONSTRAINTTYP: 约束类型(P代表主键,F代表外键)TBNAME: 表名称ENFORCED: 是否启用(Y代表启用,N代表未启用)三、封装成java接口、批量执行在实际工作中,经常会将若干个表,或者所有数据库表的外键一起禁用,此时需要批量执行相关命令,笔者根据工作实际,使用java封装了相关接口,以方便使用。对外暴露接口如下:/* * 启用当前用户指定tableName的所有外键约束 * 入参使用可变参数(jdk5新特性) * 调用方式: * 1、enableFK("pub_organ") * 2、enableFK("pub_organ","pub_stru") * 3、enableFK(new String[]{"pub_organ","pub_stru"}) */ publicstaticvoidenableFK(String...tableNames){ disableORenbaleFK(true,tableNames); }/* * 禁用当前用户指定tableName的所有外键约束 */ publicstaticvoiddisableFK(String...tableNames){ disableORenbaleFK(false,tableNames); }/* * 启用当前用户所有表的外键约束 */ publicstaticvoid enableAllFK(){ disableORenableAllConstraint(true); } /* * 禁用当前用户所有表的外键约束 */ publicstaticvoid disableAllFK(){ disableORenableAllConstraint(false); } 其中核心处理代码如下: if(tableNames==null||tableNames.length==0){ thrownew RuntimeException("入参tableNames不能为空!"); } //查询指定表的外键约束 String sql = null; String dbType = getDBType(); if(dbType.contains("ORACLE")){ sql = "select 'alter table ' || table_name || ' disable constraint ' || constraint_name from user_constraints where constraint_type='R' and TABLE_NAME in("; if(isEnable){ sql = sql.replace("disable", "enable"); } }elseif(dbType.contains("DB2")){ sql = "select 'ALTER TABLE ' || TBNAME || ' ALTER FOREIGN KEY ' || NAME ||' NOT ENFORCED ' FROM SYSIBM.SYSTABCONST WHERE CONSTRAINTYP='F' and TBNAME in("; if(isEnable){ sql = sql.replace("NOT ENFORCED", "ENFORCED"); } }else{ thrownew RuntimeException("数据库类型无效(仅支持Oracle和DB2),dbType="+dbType); } StringBuffer generateSQL = new StringBuffer(sql); for(int i=0;i
NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值.
CHECK (检查)--检查在约束中指定的条件是否得到了满足.
UNIQUE (唯一)--保证在指定的列中没有重复值.在该表中每一个值或者每一组值都将是唯一的.
PRIMARY KEY (主键)--用来唯一的标识出表的每一行,并且防止出现NULL值,一个表只能有一个主键约束.
POREIGN KEY (外部键)--通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定义的外部键可以指向主键或者其他表的唯一键.
查看表的约束条件有三个视图:
1、dba_constraints、all_constraints、user_constraints。
2、其中:dba_constraints视图需要DBA权限才能查询。
3、all_constraints、user_constraints普通用户查询。
扩展资料:
Oracle数据库使用约束(constraints)来防止无效的数据进入表中,保护数据的实体完整行约束定义在表级,如果表与表之间有从属关系,约束可以防止表的删除,通过约束字段,强制用户在插入更新和删除数据时必须遵循一定的规则。
约束定义语法: create table 表名(字段名 数据类型 约束类型) 或 create table 表名(字段名1 数据类型,字段名2,数据类型 constraints 约束别名 约束类型 (字段))
工具/材料
SQL Developer
01
首先打开SQL Developer软件,找一个没有主键约束的表,如下图所示
02
然后我们新建一个查询,在界面中输入如下的约束修改语句,如下图所示,主要通过add constranint来添加约束
03
编写完约束添加语句以后,点击工具栏中的执行按钮,如下图所示,如果输出栏显示已变更则证明主键约束创建成果
04
然后我们进入STUDENT表的约束添加页中可以看到,我们加的主键约束已经添加进去了,如下图所示
05
另外,创建表的时候可以直接添加主键约束,如下图所示,直接在表创建语句中添加constraint即可
06
表创建完以后,记得在左侧刷新数据库信息,如下图所示,因为你创建的信息不刷新的话不会更新
07
最后打开你所创建的表,看到你添加的主键约束已经加入进来了,这种方式的效果alter的方式是一样的
方法给你 你自己设置吧
修改不同的表要写不同的alter table 不同的表
alter table 你的表--此为修改表约束
add /*必须包含add 添加*/ constraint/*约束,也必须包含*/
--固定用法
alter table '表名'
add constraint 约束名 约束类型 约束描述
/*对应约束*/
alter table '表名'
add
--主键
constraint PK_字段/*此为命名规范要求*/ primary key(字段),
--唯一约束
constraint UK_字段 unique key(字段),
--默认约束
constrint DF_字段 default('默认值') for/*到*/ 字段,
--检查约束
constraint CK_字段 check(约束。如:len(字段)1),
--主外键关系
constraint FK_主表_从表 foreign(外键字段) references 主表(主表主键字段)
go--后续 一般约束是写在建表之后的
最后 给你写下限制时间的约束
alter table 表
add constraint CK_Date
check(列 between '1900-1-1 ' and '2990-1-1')