一、Oracle 数据库常用操作续关于创建表时创建约束
1、创建表的时候增加约束
----约束是定义表中的数据应该遵循的规则或者满足的条件
----约束是建立在列上的,让某一列或者某几列数据之间有约束
----约束可以在创建的表的同时创建约束,也可以在创建表之后再创建约束
----约束分为表级约束和列级约束,定义的方式不同,但是效果是相同的
----列级约束:列名  数据类型 【default 默认值】 【列级约束1  列级约束2……】
----表级约束:constraint 约束名称 约束类型(列名)
----表级约束可以自定义约束的名称,列级约束的名称由系统自动分配SYS_CN
----如果是多列之间的数据约束,只能使用表级约束定义
----not  null 非空约束只能定义列级,不能定义表级约束
/*
主键约束——primary key
外键约束——foreign key
非空约束——not  null
唯一约束——unique
检查约束——check
2、列级约束和表级约束
----外键的列级约束:references 表名(列名)
----外键的表级约束: constraint 约束名称 foreign key (列名) references 表名(列名)
//testdeptno number(3) constraint adsfa foreign key (testdeptno) references dept(deptno)
---创建表之后再创建或删除约束的方法:
----alter table 表名 modify 列名 not  null;  ---- 添加非空约束
----alter table 表名 add constraint 约束名称 约束类型(列名);----添加其他约束
----alter table 表名 modify 列名 null;-----删除非空约束
----alter  table 表名 drop constraint 约束名称; ----删除其他约束
例子:
学生表:
列名                     数据类型
st_id(主键)                              number(8) 
st_name(非空)                        varchar2(14) 
st_age(18岁以上)                        number(2) 
st_phno(不能重复)                        number(11) 
st_date(默认为当前系统时间)               date 
st_gender(非空,只能为男或女,默认为男)    char(2) 
st_grade(外键,关联班级表主键)             number(4)
create table student
(
st_id number(8) primary key,
st_name varchar2(14) not null,
st_age number(2) check (st_age>=18),
st_phone number(11) unique,
st_date date default sysdate,
st_gender char(2) default 'M' not null check (st_gender in ('M','F')),
st_grade number(4) references grade(grade_id)
/*constraint 约束名称 foreign key (列名) references 表名(列名)
st_grade number(4) constraint  adsad foreign key (st_grade) references grade(grade_id)

二、Orcale数据库操作续视图索引触发器
1、创建视图
create view empview as
select * from emp where comm is null;
创建视图时提示没有权限进行操作故进入isqlplus使用sys dba账户进行登录对scott用户进行授权:grant ada to scott,将scott授权为dba;
grant create view to scott;也是可以的;
2、修改视图
update empview set comm=comm+200 where ename='tengjiang';基本的操作和修改表是一样的;
注:对视图中的数据进行修改等同于对源表中的数据进行修改;
3、删除视图
delete empview where empno=1001;
4、修改视图结构操作同修改表结构,见上面内容,在此就不在赘述了;
5、联合查询
(1)、多表查询 参见笛卡尔积
select conut(e.ename) from emp e,dept d
where e.deptno=d.deptno amd d.dname='tengjiang';
(2)、子查询将查询结果做为一个子表,再在子表中进行查询
select count(ename) from emp where deptno=(select deptno from dept where dname='SALES');
(3)、多表查询和子表查询的差别:
a、查询次数:多表查询比子表查询查询次数多:
多表查询:m*n次
子表查询:m+n次
(4)、创建视图在查询
a、创建视图:
create view emp_dept as
select e.*,d.deptno dno,d.dname,d.loc from emp e,dept d 
where e.deptno=d.deptno;
创建了一个emp_dept 的视图:将emp表和dept表外链接起来;
b、再在视图中查询
select count(ename) from emp_dept where dname='SALES';将部门名称为'SALES'的人数统计出来;
6、创建索引;
----索引(index),是建立在某一列数据上的目录,可以提高查询的效率
----经常作为查询条件的列,创建索引可以大幅度的提高查询效率
----索引分为两部分:rowid 和键值
----rowid是每行数据存储的物理地址,键值就是具体数据的取值

----索引主要有两种:B-树索引和位图索引
---(1)、B-树索引:基于二叉树结构的。B-树索引结构有3个基本组成部分:根结构、分支节点和叶子节点。
---其中根节点位于索引结构的最顶端,而叶子节点位于索引结构的最低端,中间为分支节点。
----B-树索引是oracle中默认的索引类型,是一个树状结构的目录
----create index 索引名称 on 表名(列名);
create index index_ename on emp(ename);
----确认索引的创建可以到这里查看
select * from user_indexes;
----索引创建好之后,当使用相关列查询数据时,索引会自动帮助查询语句提高效率
---当表中的数据发生变化时,索引会自动更新,不需要手动更新维护
---当数据大量的变化后,索引会产生一些碎片文件,占用空间并且影响效率
---可以定期对索引进行重建,清除碎片文件
(2)、位图索引
----B-树索引适合某列中有大量不同的数据
----当某一列中有大量重复的数据时,应该用位图索引
----位图索引不适合数据变化过于频繁的列
----create bitmap index 索引名称 on 表名(列名)
create bitmap index index_deptno on emp(deptno);
7、触发器
----触发器 trigger,与某些特定操作绑定的操作,不会主动实施,
----但当条件满足时,会在绑定的操作触发时同步操作。
/*
create (or replace) trigger 触发器名称
before/after
insert or update or delete
(of 列) on 表
(for each row)
(when (条件范围))
begin
触发操作(insert or update or delete);
end;
  
before和after定义触发的时间是在操作之前还是操作之后
insert or update or delete定义触发的操作
(of 列) on 表:定义对哪张表的哪一列操作时触发
for each row:定义是否每行数据都触发一次
when:中间作为条件的列,必须使用old或者new来限定,表示
修改前的列或者修改后的列
*/

-----先创建一张表用来存储相应的记录信息
create table record_dept30
(
ename varchar2(20),
old_job varchar2(20),
new_job varchar2(20),
rec date
);
select * from record_dept30

create trigger tri1
after
update
of job on emp
for each row
when (old.deptno=30)
begin
insert into record_dept30
values(:old.ename,:old.job,:new.job,sysdate);
end;

----在begin部分如果要调用表中的数据,使用:old和:new 来限定

8、阻止操作
----不允许对manager的工资进行修改
/*
触发时间:before、after
触发操作:update、delete、insert
触发对象:emp表中sal列
触发的范围:职位是manager
*/
/*
阻止操作使用raise_application_error(作为id,错误提示) 方法,强制提交一个错误
错误id是自定义的,推荐使用-20000~29999之间的数字,错误提示自定义文本
*/
create or repaley trigger tri2
before 
update 
of sal on emp
for each row 
when (old.job='MANAGER')
begin
raise_application_error(-20001,'ddssfadfadsfas');

oracle数据库表约束、视图、索引—该记录为本人以前微博的文章的更多相关文章

  1. Oracle数据库之视图与索引

    Oracle数据库之视图与索引 1. 视图简介 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改. 视图基于的表称为基表,视图是存储在数据字典里的一条SE ...

  2. oracle 数据库 主键索引重建

    oracle 数据库 主键索引重建 alter table table_name drop primary key; alter table table_name add constraint pk_ ...

  3. Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器

    ---视图 ---视图的概念:视图就是提供一个查询的窗口,来操作数据库中的数据,不存储数据,数据在表中. ---一个由查询语句定义的虚拟表. ---查询语句创建表 create table emp a ...

  4. Oracle 数据库备份还原(Expdp/impdp)记录

    最近公司将原数据库服务器切换.之前没整过这块,也是一堆的度娘.经过不停的摸索,终于成功了.现在将这份艰辛记录下来,方便自己以后查阅的同时,方便有类似需求的同学参考. 我们此次切换共分:ERP.LOS. ...

  5. Oracle数据库的视图

    使用视图的优点:    1.简化数据操作:视图可以简化用户处理数据的方式.    2.着重于特定数据:不必要的数据或敏感数据可以不出现在视图中.    3.视图提供了一个简单而有效的安全机制,可以定制 ...

  6. Oracle数据库学习 视图、序列及存储过程

    视图(View) 视图也被称作虚表,也就是虚拟的表,是一组数据的逻辑表示. 视图对应一个select语句,结果集被赋予一个名字,也就是视图的名字. 视图本身不包含任何数据,它只是包含映射到基表的一个查 ...

  7. Oracle数据库---序列、索引、同义词

    --创建序列create sequence deptno_seqstart with 50increment by 10maxvalue 70cache 3; --为了方便演示,创建了一个和dept表 ...

  8. ORACLE 数据库需要创建索引的规则

    1.表的主键.外键必须有索引: 2.数据量超过300的表应该有索引: 3.经常与其他表进行连接的表,在连接字段上应该建立索引: 4.经常出现在Where子句中的字段,特别是大表的字段,应该建立索引: ...

  9. Oracle数据库随机取某条记录的一个字段值

    思路: 先将取出的值随机排序,然后在随机排序的每次取第一条的结果 举例如下: select * from(select t.code fromTBIZOPS_PROVINCE  t ORDER BY ...

随机推荐

  1. C# 练习题 打印出100-999之间所有的”水仙花数”

    题目:打印出100-999之间所有的”水仙花数”,所谓”水仙花数”是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个”水仙花数”,因为153=1的三次方+5的三次方+3的三次方.1.程序 ...

  2. BootStrap-treeview 参考

    简要教程 bootstrap-treeview是一款效果非常酷的基于bootstrap的jQuery多级列表树插件.该jQuery插件基于Twitter Bootstrap,以简单和优雅的方式来显示一 ...

  3. MTSC2019大会日程重磅发布,腾讯WeTest独家Topic大揭秘!

    WeTest 导读 中国移动互联网测试开发大会 Mobile Testing Summit China(简称 MTSC)是由国内最大的移动测试技术社区 TesterHome 发起的软件测试行业技术会议 ...

  4. Vue--运行项目发送http://localhost:8080/sockjs-node/info请求报错,造成浏览器不能热更新

    今早习惯打开vscode 输入 npm run dev 准备修复测试提出的bug 不料一堆通红的报错,让人感到有点绿的慌. 有问题呢,就需要解决问题.经过一番排查后发现是我昨天为了让测试在我本地项目中 ...

  5. python如何通过windows命令行运行一个python程序文件?

    python如何通过windows命令行运行一个python程序文件? cmd 进入到py文件对应目录下或者直接在上面的文件地址栏输入cmd,敲入回车 定位到对应的目录下 输入python xxx.p ...

  6. Java执行shell脚本并返回结果两种方法的完整代码

    Java执行shell脚本并返回结果两种方法的完整代码 简单的是直接传入String字符串,这种不能执行echo 或者需要调用其他进程的命令(比如调用postfix发送邮件命令就不起作用) 执行复杂的 ...

  7. 谁有好的oracle数据库学习书籍,麻烦提供一下,感激不尽

    作为一个IT人员,想深入学习一下oracle,以前都只是懂基本的语法,CRUD 数据库设计,数据库优化,底层完全不懂,哪位仁兄有好的书籍可以推荐一下,感激不尽.

  8. BeyondCompare4破解方法

    因为工作需要,经常会用到BeyondCompare4这个软件,但是从官方下载的BeyondCompare4只有一个月的试用期,点击输入密钥又一直打开购买软件的页面,所以就一开始就用了最笨的方法,软件的 ...

  9. Django框架(二十)-- Django rest_framework-权限组件

    一.权限组件的使用 # 用户信息表 class UserInfo(models.Model): name = models.CharField(max_length=32) # 写choice use ...

  10. odoo10学习笔记十七:controller

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189391.html 一:controller简述 odoo里面的controller相似于springM ...