约束|DDL|DML

约束| 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)
  1. 原子性(Atomic):事务中所有数据的修改,要么
    全部执行,要么全部不执行。
  2. 一致性(Consistence):事务完成时,要使所有所
    有的数据都保持一致的状态,换言之:通过事务进行
    的所有数据修改,必须在所有相关的表中得到反映。
  3. 隔离性(Isolation):事务应该在另一个事务对数据
    的修改前或者修改后进行访问。
  4. 持久性(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

  • 事务的结束

    1. 成功
      正常执行完成的 DDL 语句:create、alter、drop
      正常执行完 DCL 语句 GRANT、REVOKE
      正常退出的 SQLPlus 或者 SQL Developer 等客户端
      如果人工要使用隐式事务,SET AUTOCOMMIT ON
      (只针对一个连接)
      手动提交 :使用 commit

    2. 失败
      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

    1. 记录存在

    2. 类型 长度 兼容: 字段 兼容值

    3. 个数相同

      delete

      • delete [from] 表名 where 过滤行记录
        说明:
      1. delete 可以删除指定部分记录,删除全部记录

      2. 记录上存在主外键关联时, 删除存在关联的主表的
        记录时,注意 参考外键约束, 约束强制不让删除先删
        除从表 再删除主表

        截断数据

        truncate: 截断所有的数据 ,如果截断的是主表,结构不能
        存在外键关联,截断数据同时从结构上检查

        • 截断数据与删除数据区别 truncate 与delete 区别

          1、truncate -->ddl ,不涉及事务,就不能回滚
          delete -->dml ,涉及事务,可以回滚
          2、truncate 截断所有的数据 delete 可以删除全部 或者
          部分记录
          3、truncate从结构上检查是否存在主外键,如果存在,不让
          删除
          delete 从记录上检查是否存在主外键,如果存在,按参
          考外键约束进行删除。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值