数据的完整性

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

 约束: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. HDU - 5898 odd-even number (数位dp)

    题意:求一个区间内,满足连续的奇数长度是偶数,连续的偶数长度是奇数的数的个数. #include<cstdio> #include<cstring> #include<c ...

  2. Day1-T2

    原题目 在小X的认知里,质数是除了本身和1以外,没有其他因数的数. 但由于小 X对质数的热爱超乎寻常,所以小X同样喜欢那些虽然不是质数, 但却是由两个质数相乘得来的数. 于是,我们定义一个数小 X喜欢 ...

  3. mui下拉刷新 上拉加载

    a页面是父页面   b页面是子页面 在b页 html+ js+ 下拉和上拉执行的函数就不贴了 .在这个过程中还遇到了个问题就是刷新的图标偏上 需要改变其高度,需要在a页面里面去改变刷新图标的样式 本文 ...

  4. OC Swift混编-Swift.h File not found

    https://www.jianshu.com/p/f860fe1718ca 2016.09.13 11:53* 字数 266 阅读 1935评论 1喜欢 1 今天碰到个神坑,本人项目是OC项目,最近 ...

  5. 如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?

    https://www.cnblogs.com/upliver/p/5138160.html 如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码? 随着苹果公司对Swift的 ...

  6. 多线程开发之GCD

    简介GCD本身是苹果公司为多核的并行运算提出的解决方案.GCD在工作时会自动利用更多的处理器核心,以充分利用更强大的机器.GCD是Grand Central Dispatch的简称,它是基于C语言的. ...

  7. python人脸识别项目face-recognition

    该项目基于Github上面的开源项目人脸识别face-recognition,主要是对图像和视频中的人脸进行识别,在开源项目给出的例子基础上对视频人脸识别的KNN算法进行了实现. 0x1 工程项目结构 ...

  8. 一小时搞定Eureka

    一.什么是Eureka Eureka是Netflix公司开源的产品,它是一种基于REST( Representational State Transfer )的服务,主要用于AWS云. Eureka提 ...

  9. CTF -攻防世界-crypto新手区(1~4)

    题目已经提示用base64直接解密就行 base64解密网址 http://tool.oschina.net/encrypt?type=3 题目提示是凯撒密码 http://www.zjslove.c ...

  10. 期末项目之 Json文件

    Github上的json文件: https://raw.githubusercontent.com/color-me/first/master/b