Decode函数,CASE ELSE 视图 约束 外键 索引 事务(脏读,幻读,不可重复读)

– oracle 与myseqal 有些地方不同
除了组函数以外的函数
高级查询 集合的查询 分页的查询

Decode函数用来实现IF-ELSE的逻辑功能
SELECT DISTINCT job from emp;

DECODE
SELECT
ENAME,job,sal,
DECODE(job, – if要判断的字段
‘ANALYST’,sal * 1.2, --条件
‘MANAGER’,sal * 3,
‘PRESIDENT’,sal * 1.5,
‘SALESMAN’,sal * 1.2
, sal) year_comm – 没有匹配到的就是sal ,13薪。
from
EMP_SZL;

CASE-ELSE
SELECT
ENAME, JOB,SAL,
CASE job
WHEN ‘ANALYST’ THEN sal * 1.2
WHEN ‘MANAGER’ THEN sal * 3
WHEN ‘PRESIDENT’ THEN sal * 1.5
WHEN ‘SALESMAN’ THEN sal * 2

ELSE
	sal

END yercomm
FROM EMP_SZL;

‐‐按照部门编码分组显示,每组内按职员编码排序,并赋予组内编码
SELECT deptno, ename, empno,
ROW_NUMBER()
OVER (PARTITION BY deptno ORDER BY empno) AS emp_id
FROM emp_szl;

--集合操作 并集、交集、差集	

SELECT * FROM emp_szl WHERE DEPTNO = 10
UNION – all
SELECT * FROM EMP_szl WHERE mgr = 7839;
–UNION all + distinct = union

—————————————————————————————————————————————————————————————————————————————————————————————————————————————
–视图
–视图:就是一张临时表,不存在的,只是查询结果
– 反复查询的数据 ,可以创建视图提高查询效率

CREATE VIEW_Szl emp_11
as
SELECT * from emp_szl WHERE DEPTNO = 10;


SELECT * from emp_11;

--数据字典 user_tables  user_views user_objects
SELECT * from user_objects where object_type = 'VIEW';
SELECT * from user_objects where object_type = 'TABLE';





--------------————————————————————————————————————————————————————————————————————————————————————
--约束
--约束:非空:  not null
--主键约束:		 Primary key -  非空 + 唯一
-- 				代理主键:业务中不存在 唯一+非空特点的字段,id,开发过程中存在90%以上的代理主键
-- 				自然主键: 业务中已经存在非空+唯一 特点的字段,QQ
--				开发环境中,所有的表必须有主键
--唯一性约束: unique - 字段内容不能重复
--外键约束: foreign key

--检查约束:check


CREATE TABLE user_szl (
	id NUMBER(6) primary key,--建表的时候直接规定约束
	name VARCHAR2(20) not null unique,
	score number(4,2),
	classname VARCHAR2(20)
	);
	
	SELECT * from user_szl;

--有表之后加上唯一性约束
 ALTER TABLE user_szl 
	add constraint user_szl unique(id);
	
	
-- id - number类型 - 主键 - 代理主键
-- 自动增长 ,序列 sequence
--varchar2 类型 - 主键 -代理主键
--代码生成的UUID.randomUUID();32位随机

CREATE sequence user_szl_seq;–默认从1开始,每次加1
–start with 10 MAXVALUE 1000

INSERT into user_szl VALUES(
user_szl_seq.nextval,‘lucy’,90,‘java1906’);
INSERT into user_szl VALUES(
user_szl_seq.nextVal,‘tom’,89,‘java1906’);
INSERT into user_szl VALUES(
user_szl_seq.nextVal,‘jack’,80,‘java1906’);
INSERT into user_szl VALUES(
user_szl_seq.nextVal,‘rose’,78,‘java1906’);
INSERT into user_szl VALUES(
user_szl_seq.nextVal,‘jerry’,87,‘java1906’);

SELECT * FROM user_szl;

–currVAl获得序列的当前值(了解) ,必须在使用了一次nextVAl后才可以调用
SELECT user_szl_seq.currVal from dual;

–check:检查约束
–有点问题
alter table user_szl
add(gender char(2)check(gendar in (‘f’,‘m’)));

alter table user_szl
add(age NUMBER(3))check(age>15));

—————————————————————————————————————————————————————————————————————————————————————————————————————————
–外键

–emp 表中引用了dept表的字段 ,emp表中的deptno就叫外键
–外键约束只能额外添加

SELECT * FROM order_szl;

CREATE TABLE order_szl(
id number(3) primary key,
name VARCHAR2(20),
userid NUMBER(6)
);

–外键
alter table order_szl
add constraint user_order_fk_szl --外键的名字
foreign key (userid)
references user_szl(id);

INSERT INTO order_szl
VALUES (user_szl_seq.nextVal,‘prada’,8);
– 在父表中被子表引用的数据,被引用的id不能改,也不能删
– 想要删除夫表数据,必须确保该数据没有被子表引用
update user_szl set id = 2 where id = 8;
–结论:外键关系由业务代码维护的

———————————————–—————————————————————————————————————————----——————————————————----————

–索引
–重点:在于理论 - 面试题
–创建单列索引
SELECT * from emp_szl;

create index emp_no on emp_szl(empno);

–使用索引,当where子句中出现添加索引的字段,就会自动调用索引。
SELECT * FROM EMP WHERE empno =7862;
–删除索引

———————————————————————————————————————————————————————————————————————————————————————————————
–事务 TCL Commit rollback savepoint
/**
概念:业务层面上操作的最小单位,不可分割的。
案例:转账业务 - update -100 +100
特点:原子性、一致性(要么都成功,要么都失败)、隔离性、持久性(提交完了或者回滚完了 就结束了)
事务并发问题: 脏读(另一个事务读取到了一个事务没有提交的内容)、
换读(a,b两个管理员,a删除一个数据,b新增了一个数据,b新增的就是a删除的数据(存在于插入删除SQL语句))
不可重复读(一个人去查到了20 另一个人改了30 第一个人再去看变成了30 (INSERT 和 UPDATE 中会出现))
事务的隔离级别:
读未提交 - 最低,解决不了任何问题
读已提交的 - 解决脏读问题
可重复读 - 解决脏读、不可重复读问题
串行化 -一个一个来,效率低 最高隔离级别 (可以解决所有问题)
**/

-----------------------------------------——————————————————————————————————————————————————————————————————————

面试题:

/*
1.视图作用是什么?好处有哪些 ?
2.索引的必要性有哪些?怎么合理添加索引?索引的优势?
3.索引的原理(索引的必要性)
4.事务会出现哪些并发性问题?怎么解决? - 事务的隔离级别
事务并发锁:行级、表级
*/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值