约束| DDL
在 oracle中所有的一切都是对象, 约束也是一个个的对
象,除了能创建约束我们还能对约束进行一些其他的操
作
. 查看某个用户的约束
select constraint_name, constraint_type
from user_constraints
where owner = upper('SCOTT');
查看表面约束
select constraint_name, constraint_type
from user_constraints
where table_name = upper('emp');
查看字段名+约束
select constraint_name, constraint_type
from user_constraints
where table_name = upper('emp');
约束的禁用与启用
ALTER TABLE tb_user disable constraint
nn_user_name;
ALTER TABLE tb_user enable constraint
nn_user_name;
修改约束
--非空
alter table tb_user modify (username
varchar2(20));
--默认
alter table tb_user modify (age default null);
DDL
DDL(Data Definition Language 数据定义语言)用于操
作对象和对象的属性,这种对象包括数据库本身,以及
数据库对象,像:表、视图等等,DDL 对这些对象和属
性的管理和定义具体表现在 create、drop 和 alter 上。特
别注意:DDL 操作的“对象”的概念,”对象“包括对象及
对象的属性,而且对象最小也比记录大个层次。以表举
例:create 创建数据表,alter 可以更改该表的字段,
drop 可以删除这个表,从这里我们可以看到,DDL 所站
的高度,他不会对具体的数据进行操作。
删除表
drop table 表名 (cascade constraints)
--删除表
drop table emp_his;
--主从表关系下删除表
--先删除从表 再删除主表 ;同时删除约束
drop table tb_txt cascade constraints;
drop table tb_user cascade constraints;
--删除主表的同时级联删除约束
drop table emp_his cascade constraints;
修改表结构
修改表名 :rename to
修改列名: alter table 表名 rename column to
修改类型: alter table 表名 modify(字段 类型)
修改约束: 先删除 后添加
添加列: alter table 表名 add 字段 类型
删除列:alter table 表名 drop column 字段
事务
- 事务有一下四个特点:(ACID)
- 原子性(Atomic):事务中所有数据的修改,要么
全部执行,要么全部不执行。 - 一致性(Consistence):事务完成时,要使所有所
有的数据都保持一致的状态,换言之:通过事务进行
的所有数据修改,必须在所有相关的表中得到反映。 - 隔离性(Isolation):事务应该在另一个事务对数据
的修改前或者修改后进行访问。 - 持久性(Durability):保证事务对数据库的修改是
持久有效的,即使发生系统故障,也不应该丢失。
- .事务的隔离级别
当事务之间发生并发时有几个隔离级别:
Oracle 默认的隔离级别是 read committed。
Oracle 支持上述四种隔离级别中的两种:read committed
和 serializable。除此之外, Oralce 中还定义 Read only
和 Read write 隔离级别
Read only:事务中不能有任何修改数据库中数据的操作
语句,是 Serializable 的一个子集。
Read write:它是默认设置,该选项表示在事务中可以有
访问语句、修改语句,但不经常使用。
丢失更新:两个事务同时存储, 一个存储 100 , 一个
存储 200,最终可能至存储了 200 或者 100,那另一个的
更新就没成功,即结果不为预想的 300
脏读:事务 T1 更新了一行数据,还没有提交所做的修
改,T2 读取更新后的数据,T1回滚,T2 读取的数据无
效,这种数据称为脏读数据。
不可重复读:事务 T1 读取一行数据,T2 修改了 T1 刚刚
读取的记录,T1 再次查询,发现与第一次读取的记录不
相同,称为不可重复读。
幻读:事务 T1 读取一条带 WHERE 条件的语句,返回结
果集,T2 插入一条新纪录,恰好也是 T1 的 WHERE 条
件,T1 再次查询,结果集中又看到 T2 的记录,新纪录
就叫做幻读。
- 事务的开启
自动开启于 DML 之 insert delete update
-
事务的结束
-
成功
正常执行完成的 DDL 语句:create、alter、drop
正常执行完 DCL 语句 GRANT、REVOKE
正常退出的 SQLPlus 或者 SQL Developer 等客户端
如果人工要使用隐式事务,SET AUTOCOMMIT ON
(只针对一个连接)
手动提交 :使用 commit -
失败
rollback ,手动回滚
非法退出 意外的断电
rollback 只能对未提交的数据撤销,已经 Commit 的数据
是无法撤销的,因为 commit 之后已经持久化到数据库
中。DML
序列
使用工具|程序管理流水号,序列在创建时 没有与表关联
,在操作数据时与表关联创建
create sequence 序列名 start with 起始值 increment by 步进; create sequence seq_tb_user start with 2 increment by 2;
使用
在操作数据 添加 更新 -->主键 1)、currval :当前值 2)、nextval:下个值 select seq_tb_user.nextval from dual; select seq_tb_user.currval from dual
删除
drop sequence 序列名; drop sequence seq_tb_user
insert
-
insert into 表名 [(字段列表)] values(值列表);
添加记录
-
类型 长度 兼容: 字段 兼容值
-
值满足约束 :主键 (唯一+非空) 非空(必填) 唯一(不重复
) 默认(没有填写使用默认值) 检查(满足条件) 外键(参
考主表主键列的值) -
个数必须相同: 指定列,个数顺序与列相同;没有指
定,个数与表结构的列个数和顺序相同 (null也得占
位,没有默认值update
-
记录存在
-
类型 长度 兼容: 字段 兼容值
-
个数相同
delete
- delete [from] 表名 where 过滤行记录
说明:
-
delete 可以删除指定部分记录,删除全部记录
-
记录上存在主外键关联时, 删除存在关联的主表的
记录时,注意 参考外键约束, 约束强制不让删除先删
除从表 再删除主表截断数据
truncate: 截断所有的数据 ,如果截断的是主表,结构不能
存在外键关联,截断数据同时从结构上检查-
截断数据与删除数据区别 truncate 与delete 区别
1、truncate -->ddl ,不涉及事务,就不能回滚
delete -->dml ,涉及事务,可以回滚
2、truncate 截断所有的数据 delete 可以删除全部 或者
部分记录
3、truncate从结构上检查是否存在主外键,如果存在,不让
删除
delete 从记录上检查是否存在主外键,如果存在,按参
考外键约束进行删除。
-
- delete [from] 表名 where 过滤行记录
-