2021-04-13

- oracle学习笔记

sql的类型

1.DML(Data Manipulatiuon Language 数据操作语言):select insert update delete
2.DDL(Data Definition Language 数据定义语言):create table,alter table,truncate table ,drop table
create/drop view,sequence,index,synonym(同义词)
3.DCL(Date Control Lanagual数据控制语言) :grant (授权) revoke(撤销权限)

oracle分页:

rownum
1.rownum永远按照默认的顺序生成
2.rownum只能使用< .<=不能使用> >=
3.rownum 永远从1开始

select * 
from ( select rownum r,empno,ename,sal
		from (	select *
				from emp 
				order by sal desc ) e1
		where  rownum <=8 ) e2
Where r>=5

select语句的执行顺序:

  1. from语句
  2. Where语句
  3. Group by
  4. Having
  5. select语句
  6. Order by语句

事务:

在数据库中事务是工作的逻辑单元,一个事务由一个或多个完成一组的相关行为的sql语句组成,通过事务机制确保这一组sql语句的操作要么都成功执行,完成整个工作单元操作,要么一个也不执行.

事务的特性:
ACID
原子性(Atomictiy):一个事务里面所有包的sql语句是一个执行的整体,不可分割,要么都成功,要么都失败.
一致性(Consistency):事务开始时,数据库中的数据是一致的,事务结束时候,数据库里的数据也是一致的.拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。
隔离性(isolation):隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
持久性(Durability):是指当事务结束后,它对数据库中的影响是永久的,基本系统遇到故障的情况下,数据也不会丢失.

因为oracle支持多个事务并发执行,所以会出现下面的数据异常:
1,脏读:
当一个事务修改数据时候,另一个事务读取该数据,但是第一个事务由于某种原因对数据修改,使数据返回的原状态,这时候第二事务读取的数据与数据库的数据不一致,就叫脏读.
2.幻读(虚读)
如果一个事务基于某个条件读取数据后,另一个事务则更新了同一个表中的数据,这第一个事务再去读取数据时候,根据搜索的条件返回了不同的行,这就是幻读
3. 不可重复度
是指一个事务读取数据库的数据后,另一个事务更新了该数据,当第一个事务再次读取其中的数据时候,即会发现数据已经发生了改变,这就是不可重复度
幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。

现在来看看MySQL数据库为我们提供的四种隔离级别:

① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。

② Repeatable read (可重复读):可避免脏读、不可重复读的发生。

③ Read committed (读已提交):可避免脏读的发生。

④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。
然级别越高,执行效率就越低。像Serializable这样的级别,就是以锁表的方式,使得其他的线程只能在锁外等待

mysql的默认隔离级别:repeatable read
Oracle的默认隔离级别是read committed

oracle中的事务:
因为oracle的事务对数据库的变更的处理,我们必须对提交事务才能让数据真正的插入到数据库,在同一直线完数据库变更的操作后,还可以把事务进行回滚,这是就不会出插入数据库

oracle的事务
1.起始标志:事务中的第一条DML语句
2.结束标志: 提交:显示 commit 隐式:正常退出 ddl
create table =创建表+commit
回滚:显示rollback隐式:非正常退出,断电,宕机

约束

在数据库开发中,约束是必不可少的,使用约束可以更好的保证数据的完整性,在oracle数据库中,约束的类型包括:
主键约束(Primary key):
关系型数据库要求所有的表都应该有主键,不过可以没有.
特点:

  1. 键列必须具有唯一性,且不能为空,其实主键约束 相当于 unique+not null
  2. 一个表值允许一个主键
  3. 主键所在的列必须具有索引,如果不存在,将会在索引添加的时候自动创建

添加主键约束:
Alter table emp add constraint emp_id_pk primary key(id);

Create table person(
Pid number(10) primary key,
Name varchar2(10),
Gender number(1) default 1,
Birthday data
);
非空约束(Not null)
也叫强制列,强制键中必须有值.
Alter table emp modify ename not null;

Create table person(
Pid number(10) primary key,
Name varchar2(10) not null,
Gender number(1) default 1,
Birthday data
);
唯一约束(Unique):
唯一约束包每一行的唯一性

  1. 对于unique约束来讲,索引是必须的,如果不存在,就会自动创建一个
  2. unique允许null值,unique约束的列可存在多个null
    添加唯一约束
    Alter table emp add constraint emp_code_uq unique(code);

Create table person(
Pid number(10) primary key,
Name varchar2(10) unique,
Gender number(1) default 1,
Birthday data
);

外键约束(Foreign Key):
是不是父表中的每一列都可以作为子表的外键?
不是,子表的外键它必须是父表的主键
父表中的某条记录被子表中引用,我想直接删除父表的记录,能删除掉吗?
不一定能删除掉.
可以先把子表的记录删除完,再删除父表,或者创建级联删除
特点:

  1. 外键约束的子表中的列和对应父表中的列数据必须相同,列名可以不同
  2. 对应的父表的列存在主键约束(primary key) 或唯一约束
  3. 外键元素允许nul值,对应的行就为孤行
    alter table emp add constraint emp_deptno_fk foreign key(deptno) references dept(deptno) ;

级联删除关键字:
+on delete cascade;删除父表的时候,子表所有的匹配行全部删除掉
+on delete set null;删除父表的时候,子表都会null
检查性约束(Check):
检查约束可以用来实施一些简单的规则,比如列值在摸个范围内.
Alter table emp add constraint emp_sex_ck check(sex in(‘男’,’女’)),

Create table person(
Pid number(10) primary key,
Name varchar2(10) unique,
Gender number(1) check (Gender in(‘男’,’女’)),
Birthday data
);

表空间

把oracle数据库看作一个实在房间,表空间可以看作这个房间的空间,是可以自由分配,在这空间里面可以堆放多个箱子(箱子可以看作数据库文件),箱子里面再装物件(物件看作表)。用户指定表空间也就是你希望把属于这个用户的表放在那个房间(表空间)里面。ORACLE数据库被划分成称作为表空间 的逻辑区域——形成ORACLE数据库的逻辑结构。一个ORACLE数据库能够有一个或多个表空间,而一个表空间则对应着一个或多个物理的数据库文件。表空间是ORACLE数据库恢复的最小单位,容纳着许多数据库实体,如表、视图、索引、聚簇、回退段和临时段等。
原文链接

空间 oracle数据库的逻辑单元, 数据库----表空间
一个表空间可以与多个数据文件关联
一个数据库下可以建立多个表空间
一个表空间可以建立多个用户
一个用户可以建立多个表

操作

  • 回收站
    –查看回收站
    show recyclebin;
    –清空回收站
    purge recyclebin
    –闪回删除—>回收站
    flashback table test2 to before drop;
  • spool 指令
    Spool,Oracle快速导出数据的工具,是sqlplus的指令,不是sql语法里的东西 参考
  • 集合运算
    注意的问题:
    1.参与运算的各个集合必须列数相同,且类型一致
    2.采用第一个集合作为最后的表头
    3.order by用于在最后
    4.括号
    尽量不要使用集合运算
    –并集union
    –交集intersect
    –差集minus
  • insert
    insert into emp(empno,ename,sal,deptno) values (1001,‘tom’,3000,10);
    insert into emp(empno,ename,sal,deptno) values (&empno,&ename,$sal,&deptno);
    输入 empno 的值: 1002
    输入 ename 的值: ‘rose’
    输入 deptno 的值: 2000
  • &
    select empno,ename,sal from &t;
    输入 t 的值: emp
  • update
    update emp20 set sal=9000 where ename=‘MILLER’;
  • delete
    delete from emp where empno=1001;
  • rollback, commit
    savepoint a;
    rollback to savepoint a; 回滚到a处;
  • 修改表:增加新列,修改列,删除列,重命名列,重命名表
    –增加新列
    alter table test1 add photo blob;
    –修改列
    alter table test1 modify tname varchar2(40);
    –删除列
    alter table test1 drop column photo;
    –重命名列
    alter table test1 rename column tname to username;
    –重命名表
    rename test1 to test2;
    –删除表
    –drop table 表名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值