Java小白的数据库爱情(四)Oracle DDL、DML使用

Java小白的数据库爱情(四)Oracle DDL、DML使用

rowid 、rownum

rowid 和 rownum都是伪列

rowid

rowid 不是表的某一个字段,相当于对象的地址,根据地址转换的,不是真实的地址,可以用来区分数据的唯一

是在 插入到数据库表中时候已经确定rowid

rowid 和 rownum都是伪列 --rowid 不是表的某一个字段,相当于对象的地址,根据地址转换的,不是真实的地址,可以用来区分数据的唯一

是在 插入到数据库表中时候已经确定rowid

rowid作用: 针对于一些没有主键,唯一标识的表,区分表中重复数据的唯一,去重

rownum

结果集的序号

数字编号,从1开始,每次+1,有规律可寻,可以根据rownum的值做判定

想要使用rownum进行判断,需要对一个已经确定的结果集的rownum进行判定

用途:分页

select empno,ename,sal,comm,rownum from emp;  --数据源  一个结果集  已经确定了rownum
select * from (select empno,ename,sal,comm,rownum n from emp) where n<=6 and n>=4;

如果存在排序,rownum需要注意-

一般规律为: 根据主键字段做排序,先排序后rownum

​ 根据其他字段做排序,先确定rownum再排序

解决方案: 再嵌套select

视图

视图:->数据源

建立在表与结果集之间的视图,是一个虚拟表

作用: 封装sql 提高安全性 简化sql

逻辑视图 : 操作的还是原表中的数据,封装sql

权限: 创建视图的权限
先登录sys用户,驶入命令授权,结束后切换SCOTT用户使用
授权: grant dba to SCOTT;

回收: revoke dba from SCOTT;

创建视图 :create or replace view 视图名字 as select * from … where … [with read only];

create or replace view vw_hehe as select * from dept where deptno !=10 with read only;

删除视图 :drop view 视图名字;

drop view vw_hehe;
索引

索引
提高查询效率
相当于字典的目录
大量数据的查询,通过使用索引进行查询,效率高
但是必须是查询,大数据
索引是数据库的对象之一,需要维护,如果经常做增删就需要更新索引,效率降低
索引是透明的,一个字段是否 添加索引不影响使用
添加索引: 为某张表的某个字段添加索引
Oracle会自动为主键添加索引

添加索引:create index 索引名 on表名 (字段列表)
删除索引:drop index 索引名

DDL

数据定义语言

表的创建

create table sxt_user(
       userid number(3),
       username varchar2(30),  --默认30个字节    (4 char)
       password varchar2(6 char), --不超过6个字符
       gender char(1 char),
       regdate date
);

删除表:drop table 表名

加入注释

为表加注释:comment on table 表名 is ’ ’

为字段加注释:comment on column 表名.字段 is ’ ‘

comment on table sxt_student is '尚学堂学生表';
comment on column sxt_student.sid is '学生编号';
comment on column sxt_student.sname is '学生名';

删除 :(先删除从表 再删除主表 ;同时删除约束)
drop table 表名 cascade constraints;

创建表的同时添加约束 (定义字段后直接添加约束,没有约束名->提示无法显示约束名字,不便于维护,但是简单)

主键约束 (唯一+非空) :primary key

非空:not null,

唯一:unique,

检查:check

约束

创建表的同时添加约束 指定约束名
–1) 在字段后面指定约束名字添加约束 2)在表结构结束之前为字段添加约束

 constraint haha check(phonenum is not null)

在表结构结束之后追加约束

alter table sxt_student add constraint ck_student_gender check(sgender ='男' or sgender = '女'); 

约束的禁用与启用

ALTER TABLE tb_user disable constraint nn_user_name;
ALTER TABLE tb_user enable constraint nn_user_name;

约束不建议修改,建议删除添加

外键

–外键约束 关联班级表的主键

   -- 创建表时添加外键
   cid number(4) , constraints fk_stu_cid  references sxt_class(cid)
   --表结束添加外键
   constraints fk_stu_cid foreign key(cid) references sxt_class(cid) on delete cascade

主外键关系下删除表
删除从表,直接删除,没有影响
删除主表 : 默认先删除 从表在删除主表 ,否则就级联删除主表+主外键约束

主外键关系下,删除数据:
从表数据可以直接删除
删除主表数据:
–没有被从表引用的数据,可以直接删除
–删除主表中已经被从表引用的数据: 3中解决方案
–先删除引用了当前主表数据的那些从表数据,然后再删除当前主表数据 默认
–删除主表数据的同时,删除从表中引用了当前主表数据的那些从表数据 on delete cascade
–删除主表数据的同时,从表中,引用了当前主表数据的那些从表数据的外键字段设置为null

事务

定义:单个的逻辑单位,执行一组数据的操作,以事务为单位,在一个事务声明周期之间的一组数据,要么同时操作成功,要么同时失败

作用:保证数据的安全性

事务的开启:执行增删改操作时自动开启

事务的结束:1、提交 : commit 执行DDL DCL 正常关闭客户端 自动提交

​ 2、回滚:rollback , 意外推出(断电)

特点:

​ 原子性:

​ 一致性:

​ 隔离性:

​ 持久性:

Oracle 默认的隔离级别是 read committed

在这里插入图片描述

脏读:事务 T1 更新了一行数据,还没有提交所做的修 改,T2 读取更新后的数据,T1回滚,T2 读取的数据无 效,这种数据称为脏读数据。

幻读:事务 T1 读取一条带 WHERE 条件的语句,返回结 果集,T2 插入一条新纪录,恰好也是 T1 的 WHERE 条 件,T1 再次查询,结果集中又看到 T2 的记录,新纪录 就叫做幻读。

DML

DDL: 数据定义语言 表创建create 表修改alter 表删除drop
DML: 数据控制语言 增删改数据 insert update delete select

插入 INSERT :
insert into 表名 values(和表结构顺序和个数和类型一致的数据可以手写也可以从别的表中获取的);
insert into 表名(指定列名) values(和指定的列个数、顺序、类型一致的列数据)

insert into dept values(80,NULL,'');
insert into dept(deptno) values(90);

insert into 表(指定列) select 查询列 from 源表 where 过滤数据; insert into 表(指定列) values(值列表);
insert into 表名 select 查询列 from 源表 where 过滤数据;
insert into 表名 values(值列表 );

修改 update:

update 表名 set 字段=值 [,…] where 过滤行记录;

update dept set dname='haha',loc='shanghai' where deptno = 70;

删除 delete :

delete [from] 表名 where 过滤行记录

截断:

delete 与 数据截断的区别
共同点: 都能作为删除数据
不同点: delete执行会开启事务,truncate不会开启事务
–数据截断删除主表中数据,会从表结构上检查 ,如果有被引用不允许使用截断,delete可以,三种情况

ame=‘haha’,loc=‘shanghai’ where deptno = 70;


**删除 delete :**

delete [from] 表名 where 过滤行记录 

**截断:**

delete 与 数据截断的区别
共同点: 都能作为删除数据
不同点: delete执行会开启事务,truncate不会开启事务
         --数据截断删除主表中数据,会从表结构上检查 ,如果有被引用不允许使用截断,delete可以,三种情况

truncate 只能删除一张表中的所有数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值