提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
Oracle数据库表约束、视图、索引、事务
一、DML操作
DML的主要操作:
1、insert
操作:
insert into 表名 [(字段列表)] values(值列表); 添加记录
2、update
操作:
update 表名 set 字段=值 [,....] where 过滤行记录;
3、delete
操作:
delete [from] 表名 where 过滤行记录
4、截断数据
定义:runcate: 截断所有的数据 ,如果截断的是主表,结构不能存在外键关联,截断数据同时从结构上检查
截断数据与删除数据区别 truncate 与delete 区别
truncate | delete |
---|---|
ddl ,不涉及事务,就不能回滚 | dml ,涉及事务,可以回滚 |
截断所有的数据 | 可以删除全部或者部分记录 |
从结构上检查是否存在主外键,如果存在,不让删除 | 从记录上检查是否存在主外键,如果存在,按参考外键约束进行删除 |
二、事务
事务是指作为单个逻辑工作单元执行的一组相关操作。这些操作要求全部完成或者全部不完成。使用事
务是为了保证数据的安全有效。
事务的特点:ACID
- 原子性(Atomic):事务中所有数据的修改,要么全部执行,要么全部不执行。
- 一致性(Consistence):事务完成时,要使所有所有的数据都保持一致的状态,换言之:通过事
务进行的所有数据修改,必须在所有相关的表中得到反映。 - 隔离性(Isolation):事务应该在另一个事务对数据的修改前或者修改后进行访问。
- 持久性(Durability):保证事务对数据库的修改是持久有效的,即使发生系统故障,也不应该丢
失。
丢失更新:两个事务同时存储, 一个存储 100 , 一个存储 200,最终可能至存储了 200 或者 100,那另一个的更新就没成功,即结果不为预想的 300
脏读:事务 T1 更新了一行数据,还没有提交所做的修改,T2 读取更新后的数据,T1回滚,T2 读取的数据无效,这种数据称为脏读数据。
不可重复读:事务 T1 读取一行数据,T2 修改了 T1 刚刚读取的记录,T1 再次查询,发现与第一次读取的记录不相同,称为不可重复读。
幻读:事务 T1 读取一条带 WHERE 条件的语句,返回结果集,T2 插入一条新纪录,恰好也是 T1 的
WHERE 条件,T1 再次查询,结果集中又看到 T2 的记录,新纪录就叫做幻读。
事务的开启:
自动开启于 DML 之 insert delete update
事务的结束:
失败:rollback ,手动回滚
非法退出 意外的断电
成功:正常执行完成的 DDL 语句:create、alter、drop
正常执行完 DCL 语句 GRANT、REVOKE
正常退出的 SQLPlus 或者 SQL Developer 等客户端
如果人工要使用隐式事务,SET AUTOCOMMIT ON (只针对一个连接)
手动提交 :使用 commit
三、DDL
创建表首先明确表的作用、明确表中的字段。不会对具体数据进行操作。
首先满足数据库表的设计三范式。
知道表与表之间的关系:
- 一对一
- 一对多
- 多对多
1、约束
在 oracle中所有的一切都是对象, 约束也是一个个的对象,除了能创建约束我们还能对约束进行一些其他的操作。
1.1、查看某个用户的约束
select constraint_name, constraint_type
from user_constraints
where owner = upper('SCOTT');
1.2、查看表的约束
select constraint_name, constraint_type
from user_constraints
where table_name = upper('emp');
四、视图、索引和序列
4.1 视图
视图:建立在表|结果集|视图上的虚拟表,有以下作用
- 简化:select 查询语句
- 重用:封装select语句 命名
- 隐藏:内部细节
- 区分:相同数据不同查询
不是所有的用户都有创建视图的权限
- 前提: create view -->组 connect resource dba
- 授权: -->sqlplus /nolog
a)、sys登录 conn sys/123456@orcl as sysdba
b)、授权: grant dba to scott;
回收: revoke dba from scott;
c)、重新登录
4.2索引
前提 : 设计表首先应该按需遵循三范式
- 确定表名
- 确定字段名 类型 +约束(主键 外键 非空 默 检查认 唯一)
主键: 唯一标识一条记录(唯一并且非空)
唯一: 唯一
非空:不能为空
默认: 当没给值时使用给定一个默认值
alter table tb_user drop constraint uq_user_email cascade;
–非空
alter table tb_user modify (username varchar2(20));
–默认
alter table tb_user modify (age default null);
create or replace view 视图名 as select语句 [with read only];
外键:参考其他表(自己)的某个(某些)字段
检查:自定义的规则
索引: 提高查询速度的一种手段 相当于目录
1、唯一性较好字段适合建立索引
2、大数据量才有效果
3、主键|唯一: 唯一索引
4.3 序列
是一种工具,程序管理流水号,序列在创建时 没有与表关联 ,在操作数据时与表关联。