Oracle-2 - :超级适合初学者的入门级笔记--定义更改约束,视图,序列,索引,同义词
接着我上一篇的写,在这感觉到哇 内容好多啊 上一篇,纯手打滴,希望给个赞!
添加约束的语法:
使用 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 - :超级适合初学者的入门级笔记--定义更改约束,视图,序列,索引,同义词的更多相关文章
- Oracle-4 - :超级适合初学者的入门级笔记:plsql,基本语法,记录类型,循环,游标,异常处理,存储过程,存储函数,触发器
初学者可以从查询到现在的pl/sql的内容都可以在我这里的笔记中找到,希望能帮到大家,视频资源在 资源, 我自己的全套笔记在 笔记 在pl/sql中可以继续使用的sql关键字有:update del ...
- 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 - ...
- Oracle-3 - :超级适合初学者的入门级笔记--用户权限,set运算符,高级子查询
上一篇的内容在这里第二篇内容, 用户权限:创建用户,创建角色,使用grant 和 revoke 语句赋予和回收权限,创建数据库联接 创建用户:create user xxx identified b ...
- Oracle入门基础(十)一一数据库其他对象-视图/序列/索引/同义词
SQL> --视图 SQL> create view empinfoview as select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname ...
- Oracle学习总结_day06_视图&序列&索引
本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! day 06 视图,索引,序列 视图 什么是视图: 视 ...
- Oracle SQL Lesson (11) - 创建其他数据库对象(试图/序列/索引/同义词)
schema(模式)一个用户下一组对象的集合,一般与用户名一致. 视图 CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias].. ...
- 推荐10个适合初学者的 HTML5 入门教程
HTML5 作为下一代网站开发技术,无论你是一个 Web 开发人员或者想探索新的平台的游戏开发者,都值得去研究.借助尖端功能,技术和 API,HTML5 允许你创建响应性.创新性.互动性以及令人惊叹的 ...
- [C#] Timer + Graphics To Get Simple Animation (简单的源码例子,适合初学者)
>_<" 这是一个非常简单的利用C#的窗口工程创立的程序,用来做一个简单的动画,涉及Timer和Graphics,适合初学者,高手略过~
- 5、WPF实现简单计算器-非常适合初学者练习
Sample Calculator 这是微软社区WPF的一个示例,在源程序的基础上我进行了一点点修改,非常适合初学者练习,详细代码解释. 源程序的下载地址 http://code.msdn.micro ...
随机推荐
- ElasticSearch 插件jdbc import(1)-----定时执行
定时执行 参数schedule用来配置cron定时表达式 同时支持JSON数组的方式定义多个定时表达式: 例子如下: "schedule" : "0 0-59 0 ...
- 51nod 1536不一样的猜数游戏 思路:O(n)素数筛选法。同Codeforces 576A Vasya and Petya's Game。
废话不多说,先上题目. 51nod Codeforces 两个其实是一个意思,看51nod题目就讲的很清楚了,题意不再赘述. 直接讲我的分析过程:刚开始拿到手有点蒙蔽,看起来很难,然后......然后 ...
- 均值滤波去除图像噪声的matlab程序
所谓均值滤波实际上就是用均值替代原图像中的各个像素值. 均值滤波的方法是:对待处理的当前像素,选择一个模板,该模板为其近邻的若干像素组成,用模板中的像素的均值来替代原像素. 优点:算法简单,计算速度快 ...
- Linux jdk安装多个版本并进行切换
1. 上传jdk7 和 jdk8 包 2. 解压 [root@localhost webapps]# tar -zxvf /package/jdk-7u80-linux-x64.tar.gz 3. 配 ...
- java web Servlet 学习笔记 -3 会话管理技术
Cookie和HttpSession 什么是会话: 用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 每个用户在使用浏览器与服务器进行会话的过 ...
- 用SqlCommandBuilder 实现批量更新
一般是这样的,如果用设计器将SqlDataAdapter拖到页面中使用时,不会出现SqlDataAdapter.Update(ds)更新时出错情况,因为系统会自动生成SqlDataAdapter的属性 ...
- 【转载】兼容所有浏览器的JQuery zClip插件实现复制到剪贴板功能
文章转载自 代码家园 http://www.daimajiayuan.com/ 原文链接:http://www.daimajiayuan.com/sitejs-17973-1.html原文摘要: 相信 ...
- JAVA基础-反射
一.反射的介绍 JAVA反射机制是在运行状态中,能够获取任意一个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法.这种动态获取的以及动态调用对象的方法的功能称为java语言的反射机制. ...
- C#如何连接wifi和指定IP
大家好哈,这是我第一次写博客,我也是才大一结束,自学了10多天C#,有不对的欢迎大家指正,最近因为项目的事而被Wifi和IP折磨了很久,后来借用了一下外国人的SimpleWifi.dll 再自己写了一 ...
- UVa225,Golygons
刘儒家翻译的走出的图形可以自交,不知道大家是怎么理解的,反正我是认为这句话的意思是告诉我允许一个点访问多次 这样是WA的,n=15和n=16时多输出很多数据,应该是不允许自交,也就是不允许一个点访问多 ...