oracle怎么校验字段是不是为非空约束
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle怎么校验字段是不是为非空约束相关的知识,希望对你有一定的参考价值。
有两个库业务库与ods库 ods库应该与业务库字段保持一致 那么我修改完字段 后怎么确定业务库字段是否为非空约束?要不ods库我不知道哪一个该设置成非空约束啊 怎么校验业务库字段是否为非空约束呢?
dba_tab_columns视图有一个 nullable的字段,是说该字段是否允许为空,如果不允许为空,那么他就是非空呗,不过我忘了他的具体内容了,大概你要自己看一下才行。不过你要全部一样,自己建立不是很慢么,个人建议你可以按用户导出建表语句,然后改一改在另外一个库上建立就好了。plsql dev可以实现的,不导内容就行了。用exp也可以,不导内容只倒框架。 参考技术A oracle中在建表的时候就会在某个字段建立非空check。
举例如下:
create table stu( --此表没有任何的约束
stuid number,
name varchar(20),
age number(2),
sex char(2),
birthday date
);
给上面的表添加 主键约束 (把studi设为主键)
alter table stu add contraint pk_stuid primary key(stuid);
给上面的表添加 check约束 (插入的年龄必须大于19岁)
alter table stu add contraint chk_age check(age>19);
给上面的表添加 非空约束 (要求姓名不能为空值)--非空约束与其他的不一样
alter table stu modify name not null; 参考技术B 你看看下面的查询是否符合你的要求
select * from user_tab_columns t
where t.table_name=表名 and t.nullable='Y' 参考技术C desc 表名
Oracle--约束
约束
约束是表一级的限制,是指在表上强制执行的数据校验规则。约束加在某一列
1) 非空约束: 这一列必须赋值 NOT NULL --非空
2) 主键约束: 这一列的值必须唯一, 而且非空, 一张表只能有一个主键约束 PRIMARY KEY --主键
3) 唯一约束: 这一列的值必须唯一,允许有一个null, 一张表可以多个唯一约束 UNIQUE KEY --唯一键
4) 检查约束: 限制值的范围, 性别只能是男或者女 check
5) 默认值约束: 给某列添加一个默认值, 如果没有给这个列赋值, 这一列的值不是null,而是默认值 default
6) 外键约束: A表某一列的数据必须来源与B表中某一列, A表某一列的数据 必须在B表的某一列存在 FOREIGN KEY --外键
创建约束两种方式:
- 在创建表的时候,就创建约束
- 在创建完表之后, 以修改表, 添加约束
一、创建表的时候,就添加约束
第一种写法:
--创建一个 学生表 tb_stu -- 学号 主键约束 -- 姓名 非空约束 -- 性别 非空约束 男or女(check约束) -- 民族 默认值: "汉族" 说明不会出现null 不要加非空约束 -- 身份证 非空约束 唯一 -- 专业编号 必须来源专业表中的数据 外键约束 CREATE TABLE tb_stu( stuNO CHAR(4) PRIMARY KEY, -- 主键约束 sname VARCHAR2(20) NOT NULL, -- 非空约束 sex VARCHAR2(2) DEFAULT ‘男‘ CHECK(sex=‘男‘ or sex=‘女‘), --检查约束 nation VARCHAR2(20) DEFAULT ‘汉族‘, -- 默认值约束 personCode CHAR(18) UNIQUE, -- 唯一约束 -- sc_id char(2) REFERENCES t_school(sc_id) -- 外键约束(外键的表应该先创建) );
第二种写法: 可以给 主键月色, 唯一约束检查约束, 外键约束 起一个名字
/*规范: 主键: pk_表名_列名 唯一: uk_表名_列名 检查约束: ck_表名_列名 外键约束: fk__表名_列名 */ /* 声明好列之后, 添加约束(主键约束, 唯一约束检查约束, 外键约束), 而非空约束,默认值这两个只能在声明列指定 语法: 主键约束, 唯一约束检查 CONSTRAINTS 约束名 约束类型(主键,唯一)(列名) 检查约束 CONSTRAINTS 约束名 check(列名的表达式) 外键约束 A表的a列 引用 B表的b列, A表叫从表, B表:主表 CONSTRAINTS 约束名 FOREIGN KEY(本表列名) REFERENCES 另外一张表名(另外一张表的列名) */
例:
CREATE TABLE tb_stu2( stuNO CHAR(4), sname VARCHAR2(20) NOT NULL, --非空约束 sex VARCHAR2(2) DEFAULT ‘男‘ , nation VARCHAR2(20) DEFAULT ‘汉族‘, personCode CHAR(18), --添加约束 CONSTRAINTS pk_stuNO PRIMARY KEY(stuNo), CONSTRAINTS ck_sex CHECK(sex =‘男‘ or sex=‘女‘), CONSTRAINTS uk_personCode UNIQUE(personCode) );
一张表不能有两个主键约束
实际开发中, 一般会给表设置 一个id列(数据无意义的, 数字), 把id列设置为主键约束, 把这个id列叫做主键列
CREATE TABLE tb_product( id NUMBER PRIMARY KEY, name VARCHAR2(100) NOT NULL, price NUMBER(9,2) NOT NULL );
联合主键约束, 组合主键
CREATE TABLE tb_score( stuNo char(4), cNO char(2), score number(5,2) check(score >=0 and score <= 100), CONSTRAINTS pk_stuNo_cNo primary key(stuNo,cNo) );
外键约束:
添加数据, 先添加主表的数据,再添加从表的数据
删除数据: 删除主表的数据, 如果这条记录被从表引用, 无法删除
删除被引用的主表的这一条记录, 先删除 从表中的数据, 再删除主表
互联网项目, 提高数据库效率, 一般不会设置外键约束, 外键约束由代码来维护
从表的某一列引用主表的某一列
/* 外键约束 A表的a列 引用 B表的b列, A表叫从表, B表:主表 CONSTRAINTS 约束名 FOREIGN KEY(本表列名) REFERENCES 另外一张表名(另外一张表的列名) */ -- 注意: 1) 创建表的时候, 先创建主表, 再创建从表 -- 2) 从表中引用主表某一列值的这一列要求数据类型与主表的列的数据类型一致 -- 3) 要求主表的被引用的列必须有主键约束或者唯一约束
例:
--专业表(主表) CREATE TABLE tb_major( majorId number primary key, majorName varchar2(100) );-- 学生表(从表) major 引入 tb_major 的majorId -- 要求 major 与majorId 数据类型一样 CREATE TABLE tb_stu4( stuNO CHAR(4), sname VARCHAR2(20) NOT NULL, --非空约束 sex VARCHAR2(2) DEFAULT ‘男‘ , nation VARCHAR2(20) DEFAULT ‘汉族‘, personCode CHAR(18), major number not null, --专业,引用专业表中列 --添加约束 CONSTRAINTS pk_stuNO PRIMARY KEY(stuNo), CONSTRAINTS ck_sex CHECK(sex =‘男‘ or sex=‘女‘), CONSTRAINTS pk_personCode unique(personCode), --添加外键列 CONSTRAINTS FK_major_majorId FOREIGN KEY(major) REFERENCES tb_major(majorId) );
二:在创建完表之后, 以修改表, 添加约束
修改表
-- alter table 表名 add constraints 约束名 约束类型 alter table t_student add constraints pk_t_student_stuNo primary key(stuNo); insert into t_student(stuNo) values(‘1001‘);
删除
--删除约束 -- alter table 表名 drop constraints 约束名; alter table t_student drop constraints pk_t_student_stuNo; --如果表中有数据, 而且数据违反你将要添加的约束, 这个约束添加失败 -- 数据为王, 数据最重要
to_date()
-- 把日期字符串转换为date select to_date(‘21/09/2017‘,‘dd/mm/yyyy‘) from dual -- 显示的oracle的默认的日期格式
以上是关于oracle怎么校验字段是不是为非空约束的主要内容,如果未能解决你的问题,请参考以下文章