一.分类
传统关系型数据库 old-sql
Mysql、Oracle、PostgreSQL、DB2、H2
非关系数据库 缓存数据库 no-sql
Redis、MongoDB、Hbase
云数据库,适用于海量数据,快速扩展 . New-SQL
阿里云、腾讯云、百度云、京东云、七牛云等
高并发系统的数据设计
互联网企业:数据库的定位:存储数据
传统行业(并发量小):数据库定位:存储数据和逻辑运算
Oracle安装 链接测试 链接 navicat(百度即可)
二.Oracle基本功
数据类型
字符型,数字性,日期性,大对象型,RAW和ROWID数据类型
约束条件
主键外键,外键,默认,非空,唯一,Oracle(没有自增约束),mysql(有自增约束)
基本sql
DDL数据定义语言,
DML数据操纵语言,
DQL数据查询语言,
DCL数据控制语言,
TPL事务处理语言,
CCL指针控制语言,
DDL:
Create:创建,Alter:修改,Drop:删除
-- 新建
create table t_user2003(id INTEGER primary key ,name varchar2(50),pass varchar2(100),ctimedate);
--修改
ALTER table t_user2003 add flag INTEGER ;
--删除
drop TABLE t_user2003;
DML:
Insert:新增,Update:修改,Delete:删除
--新增
insert into t_user2003(id,name,pass,ctime,flag)
values(1,'xieyuan','xy888888',TO_DATE('2020-10-16','yyyy-MM-dd'),1);
--修改
update t_user2003 set flag=2 where id=1;
--删除
delete from t_user2003 where id=1;
DQL:
Select:查询
select id,u.* from t_user2003 u;
select * from t_user2003 where id in (1,3,5);
select * from t_user2003 where id BETWEEN 1 and 5;
select * from t_user2003 where id BETWEEN 1 and 5 and flag=2;
select * from t_user2003 where name like '%x%';
select flag from t_user2003 group by flag;
select u.* from t_user2003 u order by id desc;
关键字
and or like in between and exists distinct group by having order by
聚合操作
聚合函数 一般分组使用
count sum vag max min
select count(*),max(id),min(id),avg(id),sum(id) from t_user2003 group by id;
分页
Oracle的分页使用时rownum
性能最高的分页:带排序
select * from
(select u1.*,rownum as rid from
(select * from t_user2003 order by id desc)u1
where rownum<=4)u2
where rid>=3;
不带排序
select * from
(select u1.*,rownum as rid from t_user2003 u1 where rownum<=4)
where rid>=3;
联合查询
自然查询(笛卡尔积查询)
等值查询 结果和内连接一样,但是性能很低
内连接查询
外连接查询(右外和左外)
全连接查询
子连接查询
--自然查询
select * from t_user2003,t_userlog2003;
--等值查询
select * from t_user2003 u1,t_userlog2003 u2 where u1.id=u2.userid;
--内连接
select * from t_user2003 u1 INNER JOIN t_userlog2003 u2 on u1.id=u2.userid;
--左外连接
select * from t_user2003 u1 left JOIN t_userlog2003 u2 on u1.id=u2.userid;
--右外连接
select * from t_user2003 u1 right JOIN t_userlog2003 u2 on u1.id=u2.userid;
--全连接查询
select * from t_user2003 u1 full JOIN t_userlog2003 u2 on u1.id=u2.userid;
--子查询 将一个查询结果作为另一个查询的条件
select * from t_user2003 where id in (select userid from t_userlog2003);
三.数据库进阶
序列
序列:Oracle提供的用于生成数字的结构
比如:Oracle没有自增约束,想要实现自增,可以定义序列
创建序列
create sequence 序列的名称
[INCREMENT by 自增的值]
[START with 起始值]
[MAXValue 最大值]
[MINValue 最小值]
[cycle|nocycle]
[cache|nocache]
使用序列:
nextval:获取下一个值 如果是第一次就是初始值
currval:当前值
删除序列
drop sequence 序列的名称
--创建序列
create sequence seq_idauto2003
INCREMENT by 1
START with 100;
--使用序列
insert into t_userlog2003(id,userid,info,ctime) values(seq_idauto2003.nextval,1,'新增用户',TO_DATE('2020-10-16','yyyy-MM-dd'));
--获取当前值
select seq_idauto2003.currval,u.* from t_userlog2003 u;
--删除
drop sequence seq_idauto2003 ;