接着我上一篇的写,在这感觉到哇 内容好多啊   上一篇,纯手打滴,希望给个赞!

添加约束的语法:

    使用 alter table

      添加或删除约束,但是不能修改约束

      有效化或无效化约束

      添加not null 约束要用 modify语句

    

      添加非空约束:下面是emp1 表的表结构,id是 有非空约束的

      

      我们为name 也添加非空约束

      alter table emp1 modify(name varchar2(20) not null);  在更改的同时也可以更改他的类型和长度

        

      在我们删除约束的时候是根据 约束名 来删除的,drop column 是删除一列。drop constraint 是删除约束,我们来把 id 的 not null 约束删除掉

        alter table emp1 drop constraint SYS_C007430;     后面的 SYS_C007430 是约束名

         

      添加唯一约束:unique ,这里添加约束是用的 add ,只有not null 是用的 modify,更改id 为唯一约束

       alter table emp1 add constraint emp1_id_uk unique (id);

        

      有效化与无效化:就是使约束禁用和启用,在alter  table 中使用disable子句将约束无效化

        表中name为非空约束,这时候插入新的值如果为null是插入失败的,这时候我们可以使name 的非空约束无效化

         alter table emp1 disable constraint SYS_C007431;  使name列的非空约束无效化,不会删除此约束,只是禁用了

          这时候插入name为空的时候就可以插入进去:insert into emp1 values (1,null,'2',2);

            

         恢复他的约束功能: 刚才name插入的一条空值,我们如果想恢复他的非空约束的话,我们必须更新一下name不能为空或者直接删除此行才可以恢复他的非空约束

            这是没有删除或者更改name为空的时候更改约束的错误:alter table emp1 enable constraint SYS_C007431;

            

            删除name为空的行之后,就可以用上面的更改约束的sql来 恢复name 的非空约束了

      查询表上的约束

        -----约束名。约束类型。约束条件--表名必须大写!!!!!!
        select constraint_name,constraint_type,search_condition
              from user_constraints where table_name = 'EMP1';

      查询定义约束的列,-表名必须大写!!!!!!

              select constraint_name,column_name from user_cons_columnS where table_name = 'EMP1';

  

    视图

视图:从表中抽出的逻辑上相关的数据集合,视图是一个虚表,视图建立在已有表的基础上,视图赖以建立的这些表成为基表,

    视图的好处:可以控制数据访问,简化查询,避免重复访问相同的数据

    

    用的两个表的关联信息,此表的创建sql 来自 尚硅谷培训机构的宋红康老师 的Oracle课程中的提供的资料  链接

      

    我们来创建视图: 创建一个名为employees_view的视图  创建视图的方式和创建表的方式一样,一个create table  一个 create view ,目前理解的是,查询出来的记录作为视图的结构及数据

      create view employees_view as
        select employee_id,last_name,salary,department_name
        from employees e,departments d
        where e.department_id = d.department_id;

      创建好的视图,对视图上的更改会映射到对应的表中的值,表中的值也会相应的更改,就好比如  复印纸如视图,白纸如 基表,在复印纸上写的东西,会覆盖掉复印纸下面白纸的内容,视图与基表中对应的数据永远        一致

      查询基表中employee_id 为101 的员工的信息

        select employee_id,last_name,salary,department_name from employees e,departments d where e.department_id = d.department_id and employee_id = 101;

        

        我们来查看视图中此员工的信息

        select employee_id,last_name,salary,department_name from employees_view where employee_id = 101; 从这也可以看出来,视图提供了查询的方便

        

        上面基表中的与视图中的数据一样,我们来更改视图中员工的工资salary 为20000,update employees_view set salary = 20000 where employee_id = 101; 执行后的表数据

        

        我们不对基表做修改,再次查询基表,此时基表的数据跟着改变了

        

修改视图:使用cheate or replace view 子句 修改视图

    使用这个可以更改我们的视图的结构,如我们把employees_view中的employee_id列去掉,但是会覆盖掉原来的视图

        create or replace view employees_view as  select last_name,salary,department_name
        from employees e,departments d
        where e.department_id = d.department_id;相较于上面创建视图只是去掉了我们想去掉的employee_id列

        

可以选择with read only 选项屏蔽对视图的DML操作

    我们可以使用这个方法对视图进行操作,使被操作的视图不能被增删改,只允许用户查询了,我们只需要在创建更改视图的时候在末尾加上这个约束就可以

      create or replace view employees_view as  select last_name,salary,department_name
        from employees e,departments d
        where e.department_id = d.department_id with read only;

      当我们修改视图结束后,再次对修改过后的视图进行增删改的时候就会出现错误

        

      

    简单视图与复杂视图:创建视图中用到组函数了就是复杂视图。没有的话就是简单视图

      

      创建一个复杂视图:将每个部门的工资和部门名创建试图

        create or replace view dept_sal_view as
              select d.department_name ,avg(salary) avg_sal        --在这必须要给组函数列娶一个别名,因为是查出来,Oracle并不知道这一行叫什么
              from employees e ,DEPARTMENTS d
              where e.department_id = d.department_id
              group by department_name
              with read only;

        

        一般复杂视图是不允许进行增删改的操作的,拿上上面举例,两列都是通过函数来得出的值,如果更改一个avg_sal ,但是他是很多数算出来的,数据库就不知道该改哪个值了,所以会报错

          

      删除视图:drop view + 视图名

  Top-N分析:查询一个列中最大或者最小的n个值,最大和最小的值的集合是Top-N分析所关心的:例如?销售量最高的十中产品是什么

      在Oracle中,rownum是对查询出来的数据进行一个数字排序的伪列。对于rownum的具体描述可以看这个帖子  超牛皮的大神rownum      里面可以说讲的很详细了。就不多说了。我也去学习学习。

          查询工资排名 10 到 20 的员工信息

           select rn , last_name,salary from (
                select rownum rn,last_name,salary from (
                    select employee_id,last_name,salary from employees order by salary desc) ) where rn >10 and rn<20;

  序列:提供标识一行的唯一标识,类似sql中的自增长主键列,

      创建一个序列  ,这样就会创建一个名为emp_sql的序列

        create sequence emp_sql
        increment by 1 --每次增长1
        start with 10 --从10开始
        maxvalue 10 --最大值 10
        cycle --是否循环
        nocache --是否缓存 不缓存

      查看序列:select emp_sql.nextval (currval) from dual;

          首次查询注意不能直接使用currval来获取当前值,应先使用nextval或取下一个值,此时序列才会由当前值的存在,否则报错 :尚未在此会话中定义

          我们每次运行序列都会自增长一个,到 设置的最大值10会循环到1 继续开始

      更改序列:alter sequence emp_sql increment by 2 nocycle;  更改为每次增长2 ,不循环,这时候只要到了他的最大值的话,如果不循环就会爆出错误

          

      改变序列的初始值,只能通过删除此序列然后在创建才可以修改

      序列在下列情况下出现裂缝

        --回滚

        --系统异常

        --多表同时使用同一个序列

      如果不将序列的值装入内存,可使用表user_sequences查看当前序列的有效值,select sequence_name,min_value,max_value,increment_by,last_number from user_sequences;

      删除序列:drop sequence + name  就能删除序列了

  

  索引:索引就是提高查询速度的,类似字典的索引,一旦用户创建了索引,用户就不需要维护和指定去调用索引了,一切交给系统维护,当表删除时,相应表上的索引也会被清空

    创建索引:自动创建:在定义primary key 或者unique 约束后,系统会自动在相应的列上创建唯一性索引

         手动创建:用户可以在其他列上创建非唯一的索引,以加快查询速度

          create index index_in on jobs(min_salary);   create index 索引名 on 表名(表中列名);

    删除索引:drop index + name

    什么时候创建索引:

        列中数据值分布很广

        列经常在where 子句或连接条件中出现

        表经常被访问而且数据量很大,访问的  数据大概占数据总量的2% 到 4%

  同义词:同义词可以为表起一个名,这个名区别与起别名,用表名和同义词查询同样有效

      当查询employees 表我们只能这么输入 : select * from employees;

      我们为这个表起一个同义词:create synonym e for employees;   用e来代表employees

      这时候我们就可以这么查询了 select * from e;

      删除同义词,  drop synonym + 名,

Oracle-2 - :超级适合初学者的入门级笔记--定义更改约束,视图,序列,索引,同义词的更多相关文章

  1. Oracle-4 - :超级适合初学者的入门级笔记:plsql,基本语法,记录类型,循环,游标,异常处理,存储过程,存储函数,触发器

    初学者可以从查询到现在的pl/sql的内容都可以在我这里的笔记中找到,希望能帮到大家,视频资源在 资源, 我自己的全套笔记在  笔记 在pl/sql中可以继续使用的sql关键字有:update del ...

  2. Oracle-1 - :超级适合初学者的入门级笔记,CRUD,事务,约束 ......

    Oracle 更改时间: 2017-10-25  -  21:33:49 2017-10-26  -  11:43:19 2017-10-27  -  19:06:57 2017-10-28  -  ...

  3. Oracle-3 - :超级适合初学者的入门级笔记--用户权限,set运算符,高级子查询

    上一篇的内容在这里第二篇内容, 用户权限:创建用户,创建角色,使用grant  和 revoke 语句赋予和回收权限,创建数据库联接 创建用户:create user xxx identified b ...

  4. Oracle入门基础(十)一一数据库其他对象-视图/序列/索引/同义词

    SQL> --视图 SQL> create view empinfoview as select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname ...

  5. Oracle学习总结_day06_视图&序列&索引

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! day 06 视图,索引,序列 视图 什么是视图: 视 ...

  6. Oracle SQL Lesson (11) - 创建其他数据库对象(试图/序列/索引/同义词)

    schema(模式)一个用户下一组对象的集合,一般与用户名一致. 视图 CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias].. ...

  7. 推荐10个适合初学者的 HTML5 入门教程

    HTML5 作为下一代网站开发技术,无论你是一个 Web 开发人员或者想探索新的平台的游戏开发者,都值得去研究.借助尖端功能,技术和 API,HTML5 允许你创建响应性.创新性.互动性以及令人惊叹的 ...

  8. [C#] Timer + Graphics To Get Simple Animation (简单的源码例子,适合初学者)

    >_<" 这是一个非常简单的利用C#的窗口工程创立的程序,用来做一个简单的动画,涉及Timer和Graphics,适合初学者,高手略过~

  9. 5、WPF实现简单计算器-非常适合初学者练习

    Sample Calculator 这是微软社区WPF的一个示例,在源程序的基础上我进行了一点点修改,非常适合初学者练习,详细代码解释. 源程序的下载地址 http://code.msdn.micro ...

随机推荐

  1. Linux入门之常用命令(14) kill

    Linux kill 命令使用详解 功能说明:删除执行中的程序或工作. 语 法:kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>] 补充说明: ...

  2. 【ASP.NET MVC】jqGrid 增删改查详解

    1   概述 本篇文章主要是关于JqGrid的,主要功能包括使用JqGrid增删查改,导入导出,废话不多说,直接进入正题. 2   Demo相关 2.1   Demo展示 第一部分 第二部分 2.2 ...

  3. pygame_polygon

    今天我们要在窗口上绘制简单的多边形 1.认识几个简单的常用的颜色: black=(0,0,0) while=(255,255,255) red=(255,0,0) green=(0,255,0) bl ...

  4. Redhat 5上OPENLDAP的安装备份和恢复

    1. 安装 1.1. 安装环境 查看当前操作系统版本: [root@vmw9181-app ~]# cat /etc/issue Red Hat Enterprise Linux Server rel ...

  5. jdk8与jdk9的共存

    以前安装JDK,需要手动配置环境变量.JDK8多了自动配置环境变量,所以可以不用手动配置. 如果我已经装了JDK8,还想再装一个JDK9,安装完,自动配置的环境变量会指向JDK9版本. 解决方法 删除 ...

  6. HDU1068 二分匹配 独立集

    前边和后边性别不同!!!不然NP了 Girls and Boys Problem Description the second year of the university somebody star ...

  7. ssm搭建报错

    在搭建ssm框架时候踩得坑:1.对于拦截器url-parttern的设置:第一次设置的是/** 本以为这个是表示拦截所有,没想到这是错误的写法,正确的写法是/    启动项目不会报错,但是会出现404 ...

  8. 画布跟js.oop

    <Canvas> 是HTML5中新出现的一个元素.就是可以通过  JS绘制图形. 画布(Canvas)是一个没有内容也没有边框的矩形区域.我们可以控制里面的每一个像素. 下面我们首先定义一 ...

  9. 【学习】js学习笔记---数组对象

    一.属性 length 数组的大小.数组的length属性总是比数组中定义的最后一个元素的下标大一,设置属性length的值可以改变数组的大小.如果设置的值比它的当前值小,数组将被截断,其尾部的元素将 ...

  10. UWP 分享用那个图标

    有两个图标,如果让你选,你会用哪个图标做分享图标? 这就算有意义的图标和通用图标的选择. 可以看到 左边的图标比较有意义,但是右边的图标是通用的. 是需要选有意义的?还是通用的 在 UWP ,选的是第 ...