Oracle学习笔记(四)
六、约束
1、约束的作用
定义规则:什么数据可以输入,什么不可以
确保完整性:数据的精确性和可靠性
2、Oracle五个重要的约束:
非空约束、主键约束、外键约束、检查约束、唯一约束。
(1)非空约束
(a)在创建表的时候设置非空约束
例子:
create table usr_a(
user_id number(30) not null,
user_name varchar2(20) not null
);
desc usr_a ------看到表格是否为空选项为not null
insert into usr_a(id) values(1); -------非空的未插入值会报错
(b)在修改表时添加非空约束
例子:
alter table userinfo modify user_a_id number(30) not null;-----表中有数据,需要删除表中数据,delete from useinfo;
(c)在修改表时,去除非空约束
alter table userinfo modify user_a_id number(30) null;
(2)主键约束
作用:确保表中每一行数据的唯一性
说明:
1、一张表只能设计一个主键约束
2、主键约束可以由多个字段构成(联合主键或复合主键)
(a)在创建表时设置主键约束
方法一:(设置主键约束就相当于为其加上了非空约束)
create table usr_p(
user_id number(6,0) primary key,
user_name varchar2(20)
);
方法二(创建联合主键):
create table usr_c(
user_id number(30),
user_name varchar2(20),
user_pwd varchar2(20),
constraint pk_id_username primary key(user_id,user_name)
);
忘记主键查找的方法
desc user_constraints ---查看数据字典
select constraint_name from user_constraints where table_name='USR_C1';
查看未设置主键约束的表,系统附加主键
select constraint_name from user_constraints where table_name='USR_P';
(b)在修改表时添加主键约束(表中没有数据)
alter table user_info add constraint pk_user_a_id primary key(user_a_id);
desc user_constraints
select constraint_name from user_constraints where table_name='USER_INFO';
(c)更改约束的名称
alter table user_info rename constraint pk_user_a_id to new_pk_id;
(d)删除主键约束
禁用约束
alter table user_info disable constraint new_pk_id;
解开禁用
alter table user_info enable constraint new_pk_id;
查看状态
desc user_constraints
select constraint_name,status from user_constraints where table_name='USER_INFO';
删除约束
方法一:
alter table user_info drop constraint new_pk_id;
方法二:
alter table user_info drop primary key;
(3)外键约束
说明:唯一一个设计两个表之间关系的约束
(a)在创建表时添加外键约束(列级)
从表中外键字段的值必须来自主表中的相应字段的值,或者为null值
(例一)在用户信息表当中,有一个用户类型字段,将类型字段设置成一个外键约束,用它来引用用户类型表当中的用户编号字段
创建主表 ,用户类型表
create table typeinfo(
typeid varchar2(10) primary key,
typename varchar2(20)
);
创建从表,用户信息表
create table userinfo_f(
id varchar2(10) primary key,
username varchar2(20),
typeid_new varchar2(10) references typeinfo(typeid)
);
主表插入数据
insert into typeinfo values(1,1);
从表出入数据(从表的外键插入数据要么是主表的值,要么是null,不可以是其他值,比如insert into userinfo_f(id,typeid_new) values(3,2)(在主表只有(1,1)数据时就是错误的))
insert into userinfo_f(id,typeid_new) values(1,1);
insert into userinfo_f(id,typeid_new) values(2,null);
(b)在创建表时设置外键约束
级联删除
删除从表的字段,主表的对应字段也会被删除
此表建成后,插入数据,关联的表typeinfo,就会跟新,但是typeinfo中的数据无法删除
create table userinfo_f2(
id varchar2(10) primary key,
username varchar2(20),
typeid_new varchar2(10),
constraint fk_typeid foreign key(typeid_new) references typeinfo(typeid)
);
级联删除(外键的级联删除:如果父表中的记录被删除,则子表中对应的记录自动被删除)
create table userinfo_f2(
id varchar2(10) primary key,
username varchar2(20),
typeid_new varchar2(10),
constraint fk_typeid_new foreign key(typeid_new) references typeinfo(typeid) on delete cascade
);
(c)在修改表时添加/删除外键约束
create table userinfo_f3(
id varchar2(10) primary key,
username varchar2(20),
typeid_new varchar2(10)
);
添加外键约束
alter table userinfo_f3 add constraint fk_typeid_alter foreign key(typeid_new) references typeinfo(typeid);
添加级联外键约束
alter table userinfo_f3 add constraint fk_typeid_alter foreign key(typeid_new) references typeinfo(typeid) on delete cascade;
删除外键约束
禁用删除
alter table userinfo_f3 disable constraint fk_typeid_alter;
启用
alter table userinfo_f3 enable constraint fk_typeid_alter;
查看
select constraint_name,constraint_type,status from user_constraints where table_name='USERINFO_F3';
表格中缩写P主键约束,R外键约束,C约束的意思
彻底删除约束
alter table userinfo_f3 drop constraint fk_typeid_alter;
(4)唯一约束
设置唯一约束的值需要保证值的唯一性.比如类似的主键需要唯一性.
唯一约束和主键约束的区别:
(1)主键字段值必须是非空的
(2)唯一约束可以在每张表用有多个,主键只能一个. 唯一约束包含主键约束
(a)在创建表时设置唯一约束
列级(单独一个列设置)
create table userinfo_f4(
id varchar2(10) primary key,
username varchar2(20) unique,
userpwd varchar2(10)
);
表级(整个表设置)
create table userinfo_f5(
id varchar2(10) primary key,
username varchar2(20),
constraint un_username unique(username),
userpwd varchar2(10)
);
(b)在修改表时添加唯一约束
alter table userinfo_f5 add constraint un_userpwd unique(userpwd);
(c)删除唯一约束
禁用删除
alter table userinfo_f5 disable constraint UN_USERPWD;
启用
alter table userinfo_f5 enable constraint UN_USERPWD;
查看
select constraint_name,constraint_type,status from user_constraints where table_name='USERINFO_F5';
彻底删除约束
alter table userinfo_f5 drop constraint UN_USERPWD;
(5)检查约束
作用:表中的值更具有实际意义(核查有没有不合理的数据,比如工资是负值)
a、在创建表时设置检查约束
列级约束
create table userinfo_f6(
id varchar2(10) primary key,
username varchar2(20) ,
salary number(5,0) check(salary>0),
userpwd varchar2(10)
);
测试数据
insert into userinfo_f6 values(1,'xx',-50,'1234');
表级(整个表设置)
create table userinfo_f7(
id varchar2(10) primary key,
username varchar2(20) ,
salary number(5,0),
constraint ck_salary check(salary>0),
userpwd varchar2(10)
);
测试数据
insert into userinfo_f7 values(1,'xx',-50,'1234');
b、在修改表时添加检查约束
alter table userinfo_f7 add constraint ck_userpwd_new check(userpwd>'1');
测试数据
insert into userinfo_f7 values(1,'xx',50,'0');
c、删除检查约束
禁用删除
alter table userinfo_f7 disable constraint CK_USERPWD;
启用
alter table userinfo_f7 enable constraint CK_USERPWD;
查看
select constraint_name,constraint_type,status from user_constraints where table_name='USERINFO_F7';
彻底删除约束
alter table userinfo_f7 drop constraint CK_USERPWD_NEW;
总结:
1、在创建表时设置约束,非空约束只能在列级约束,不能在表级约束.非空约束是没有名字
2、在修改表时添加约束,非空约束直接加在最后即可。
3、更改约束,非空无法改,因为没有名字
4、删除约束时,非空改为空即可
Oracle学习笔记(四)的更多相关文章
- oracle 学习笔记(四)
1. SQL(高级查询) 1.1. 子查询 1.1.1. 子查询在WHERE子句中 在SELECT查询中,在WHERE查询条件中的限制条件不是一个确定的值,而是来自于另外一个查询的结果.为了给查询提供 ...
- Oracle学习笔记四
一.PL/SQL编程 游标(光标Cursor) 为什么使用游标 在写java程序中有集合的概念,那么在pl/sq中也会用到多条记录,这时候我们就要用到游标,游标可以存储查询返回的多条数据. 语法: C ...
- Oracle学习笔记四 SQL命令(二):SQL操作语言类别
SQL分为下列语言类别 1.数据定义语言(DDL) Create.Alter.Drop 2.数据操纵语言(DML) Insert.Select.Delete.Update 3.事务控制语言(TCL) ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- java之jvm学习笔记四(安全管理器)
java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(四) indigo devices
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- oracle学习笔记第一天
oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字 1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...
随机推荐
- 打造基于jQuery的智能选择输入框
UPDATE:修正了在FireFox下显示的问题,重新copy CSS即可 写完这个名字忽然觉得有点标题党的嫌疑,但是又不知道什么样的名字比较合适,那就暂且这样吧. 今天要讲的东西比较简单,其中会用到 ...
- boost::threadpool 调用类成员变量并传入参数 的方法
1. 首先到官网下载 http://threadpool.sourceforge.net/ 2. 包含头文件 #include "../boost/threadpool.hpp& ...
- 峰Spring4学习(6)spring AOP的应用例子
一.AOP简介: 二.AOP实例: 三.使用的例子 需求:在student添加的前后,打印日志信息: 0)spring AOP需要引用的jar包: 1)StudentService.java接口: p ...
- C++ 构造函数_析构函数
什么是析构函数 如果说构造函数是对象来到世间的第一声哭泣,那么析构函数就是对象死亡前的最后遗言. 析构函数在对象销毁时会被自动调用,完成的任务是归还系统的资源. 特性: 1.如果没有自定义的析构函数, ...
- Train-Alypay-Cloud:蚂蚁大数据平台培训开课通知(第三次)
ylbtech-Train-Alypay-Cloud:蚂蚁大数据平台培训开课通知(第三次) 1.返回顶部 1. 您好! 很高兴通知您,您已经成功报名将于蚂蚁金服计划在2018年2月28日- 2018年 ...
- 中信信用卡淘气金卡,V金卡,大众点评金卡,易卡白金卡
中信 | 谈谈经典多倍积分卡:易卡&悦卡(超详细+图解+思考)! http://www.flyertea.com/thread-1972766-1-1.html 易卡积分测试,购物/机票/外卖 ...
- python3.3.5x64+win2003x64+aliyun oss sdk安装步骤
参考文章:https://help.aliyun.com/document_detail/32026.html?spm=5176.doc31890.6.690.S6ZrRn 1.安装python3.3 ...
- SmallLocks
folly/SmallLocks.h This module is currently x64 only. This header defines two very small mutex types ...
- RPM包下载网址
https://pkgs.org/ (最爱) http://rpm.pbone.net/ http://rpmfind.net/linux/RPM/index.html
- Solr Facet 统计查询
一)概述 Facet是solr的高级搜索功能之一,可以给用户提供更友好的搜索体验.在搜索关键字的同时,能够按照Facet的字段进行分组并统计.例如下图所示,你上淘宝,输入“电脑”进行搜索,就会出现品牌 ...