数据的完整性

数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则。数据的完整性使用约束、触发器、函数的方法来实现。在这三个方法中,约束易于维护,具备最好的性能,所以作为首选。

 约束:not null、unique(可以为空,不能重复) 、primary key、foreign key、check

一个表中只能有一个主键,但是可以有多个unique.

案例:

现有一个商店数据库,有三个表:

商品表goods(商品号goodsId,商品名goodsName,单价unitprice,商品类别category,供应商provider);

客户表customer(客户号customerId,姓名name,地址address,电邮email,性别sex,身份证cardId);

购买purchase(客户号customerId,商品号goodsId,购买数量nums);

1.建表,定义要求如下:

(1)每个表有主外键;

(2)客户的姓名不能为空值;

(3)单价必须大于0,购买数据必须在1到30之间;

(4)电邮不能重复

(5)客户性别是男女,默认为男

goods:

create table goods(goodsId  char(8) primary key,--主键,主键名字是系统分配的
goodsName varchar2(30),
unitprice number(10,2) check(unitprice>0),
category varchar2(8),
provider varchar2(30));

customer:

create table customer(customerId number(8) primary key,--主键
name varchar2(50) not null,
address varchar2(50),
email varchar2(50)  unique,
sex  char(2) default '男' check(sex in('男','女')),
cardId  char(18)  not null);

purchase:

create table purchase(customerId number(8) references customer(customerId),
goodsId char(8) references goods(goodsId),
nums number(2) check (nums  between 1 and 30));

如果在建表时忘记建立必要的约束,则可以在建表后使用alter table命令为表增加约束。但是要注意:增加not null 约束时,需要使用modify,其他为add选项。

1)客户商品名不能为空:alter table goods modify  goodsName not null;

2)地址为‘东城、朝阳、海淀、西城’:alter table customer add constraint addresscheck check (address in ('朝阳','西城'));

3)身份证不能重复:alter table customer add constraint cardunique unique(cardId)

删除约束:alter table 表名 drop constraint  约束名称

删除主键:alter table 表名 drop  primary key  cascade;

数据字典视图显示约束:user_constraints、user_cons_columns

表级定义和列级定义是没有差异的,只是书写方式的不同 。

索引:索引是为了提高速度,抽象理解为一个索引表(目录)

列上加索引:

单列索引:create index 索引名  on  表名(列名)

create index nameIndex on customer(name)

复合索引:create index 索引名  on  表名(列名1,列名2)

建立索引原则:

1)在大表上建立索引才有意义

2)在where子句中或者连接条件上经常引用的列上建立有意义

3)多级索引不要超过4层

索引的缺点:

1.建立索引占用表的1.2倍的硬盘和内存

2.更新数据的时候,系统必须要有额外的时间来同时对索引进行更新。

user_indexs显示当前用户的索引信息;dba_indexs用于显示数据库所有的索引信息;user_ind_columns可以显示索引列的信息。

7.windows-oracle实战第七课 --约束、索引的更多相关文章

  1. TensorFlow实战第七课(dropout解决overfitting)

    Dropout 解决 overfitting overfitting也被称为过度学习,过度拟合.他是机器学习中常见的问题. 图中的黑色曲线是正常模型,绿色曲线就是overfitting模型.尽管绿色曲 ...

  2. 【Cocos游戏实战】功夫小子第七课之游戏主功能场景逻辑功能和暂停功能场景的分析和实现

    CSDN的markdown编辑器是吃屎了么! !.什么玩意.!写了一半写不了东西还全没了,搞个毛线! 本节课的视频教程地址是:第七课在此 假设本教程有帮助到您,希望您能点击进去观看一下,并且如今注冊成 ...

  3. 【C语言探索之旅】 第二部分第七课:文件读写

    内容简介 1.课程大纲 2.第二部分第七课: 文件读写 3.第二部分第八课预告: 动态分配 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏 ...

  4. Kali Linux Web 渗透测试视频教程— 第七课 OpenVas

    Kali Linux Web 渗透测试视频教程— 第七课 OpenVas 文/玄魂 视频教程地址:http://edu.51cto.com/course/course_id-1887.html 目录 ...

  5. 【C语言探索之旅】 第一部分第七课:循环语句

    内容简介 1.课程大纲 2.第一部分第七课: 循环语句 3.第一部分第八课预告: 第一个C语言小游戏 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编 ...

  6. 红帽学习笔记[RHCSA] 第七课[网络配置相关]

    第七课[网络配置相关] 在Vmware中添加网卡 编辑 -> 编辑虚拟网络 -> 添加网络->随便选择一个如VMnet2-> 选择仅主机模式 -> 勾掉使用本地DHCP服 ...

  7. NeHe OpenGL教程 第七课:光照和键盘

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  8. 有奖试读—Windows PowerShell实战指南(第2版)

    为什么要学PowerShell? Windows用户都已习惯于使用图形化界面去完成工作,因为GUI总能轻易地实现很多功能,并且不需要记住很多命令.使得短时间学会一种工具成为可能. 但是不幸的是,GUI ...

  9. Oracle day05 建表_约束

    表的创建 标准的建表语法 : CREATE TABLE [schema.] table (column datatype [DEFAULT expr], ... ); 使用子查询创建表的语法 CREA ...

随机推荐

  1. POJ 2443:Set Operation 经典位运算好题

    Set Operation Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 2965   Accepted: 1196 Des ...

  2. node.js爱心邮件

    一.用的软件是VsCode:下载地址:https://code.visualstudio.com/ 二.用的是node.js完成:下载地址:http://nodejs.cn/download/ 无脑下 ...

  3. 当chart图遇上bootstrap的TAB切换 无宽高问题?

    .tab-content > .tab-pane, .pill-content > .pill-pane {    display: block; /* undo display:none ...

  4. 量化投资_Multicharts数组操作函数_zeros()设定数组元素为0(自定义)

    1. 函数的用法类似于Python的zeros函数,给定数组尺寸,让数组的元素归零 //zeros:根据设定的尺寸长度,让一维数组的元素全部归零 inputs: arr[MaxSize]( numer ...

  5. 【数据结构】二叉树的遍历(前、中、后序及层次遍历)及leetcode107题python实现

    文章目录 二叉树及遍历 二叉树概念 二叉树的遍历及python实现 二叉树的遍历 python实现 leetcode107题python实现 题目描述 python实现 二叉树及遍历 二叉树概念 二叉 ...

  6. SQL中将某个字段根据分隔符分割成两个字段

    假设有表如下: 商品名称 耐克/DS001 安踏/AT002 阿迪达斯/AD009 使用SQL将[商品名称]字段按照分隔符‘/’进行分割后实现以下效果: 品牌 商品代码 耐克 DS001 安踏 AT0 ...

  7. 高质量Contrast Essay写作的结构分享

    很多留学生对于Contrast Essay写作不是很了解,拿不到高分也是常有的事,那么大家要如何彻底掌握Contrast Essay写作呢?今天小编就给同学们分享Contrast Essay写作的结构 ...

  8. AttributeError: 'list' object has no attribute 'data'智障错误

    import urllib.requestimport urllib.parse url = ['http://fanyi.youdao.com/translate?smartresult=dict& ...

  9. SASS - 语法

    SASS – 简介 SASS – 环境搭建 SASS – 使用Sass程序 SASS – 语法 SASS – 变量 SASS- 局部文件(Partial) SASS – 混合(Mixin) SASS ...

  10. CSS的Flex弹性布局概念

    1.Flex概念: Flex是Flexible Box的缩写,顾名思义为“弹性布局”,用来为盒装模型提供最大的灵活性. 任何一个容器都可以指定为Flex 布局. 设为flex布局以后,子元素的floa ...