Oracle入门
Oracle的发展史
1977年6月,Larry Ellison和他的朋友在硅谷创建了一家软件开发实验室,这是oracle的前身。
1979年夏季发布了正式的正式的,比较完善的数据库。
1983年,正式更名为oracle公司。
2002年4月26日正式启用“甲骨文”作为公司的中文注册商标
主要的系统版本有oracle 8i、oracle 9i、oracle 10g、oracle 11g 一直到现在最新的oracle 18c
Oracle的功能特点
支持多用户,高并发事务处理
数据安全性和完整性方面性能优越
网格计算,Oracle能够把许多低成本的设备集成起来,为用户提供高性能的共享计算能力
具有较高的可移植性,能够在主流的操作系统和平台上运行
Oracle的结构体系:
Oracle只有一个数据库,他和mysql是不一样的。那你们会问我写项目怎么办,那么在Oracle中使用的是表空间也就是tablespace来区分。
启动Oracle数据库
Oracle服务以后台服务进程来进行管理。服务是数据库创建过程创建的,并且与数据库关联,启动或关闭Oracle数据库相关的服务,就是完成数据库的启动和关闭。
一个数据库有一项或者多项服务与之关联。
win+r 打开黑窗口,输入services.msc打开服务
OracleOraDb11g_home1TNSListener Oracle服务器的坚挺程序。运用远程或者工具控制Oracle时,必须开启监听服务
OracleServiceSID 是为SID(系统标识符)数据库实力创建的。其中SID是在安装Oracle 11g时输入的数据库名称。是Oracle的核心服务,启动Oracle实例必须启动服务。
OracleJobSchedulerSID 任务调度服务,负责按预先设定的时间周期性的执行某项用户自定义的功能,从而实现Oracle服务器的自动管理功能
OracleDBConsoleSID 负责在Windows平台下启动Oracle企业管理器
登陆Oracle数据库
使用SQLplus和plsql登陆数据库
使用sqlplus是连接本地服务器不需要打开监听
win+r,打开黑窗口
输入sqlplus+回车
Scott用户刚开始使用时候是锁定的:需要解锁
alter user scott account unlock;
这是固定格式
退出:
exit;
quit;
查看当前用户:
show user;
查看表结构:
desc 表名;
Sys用户 超级管理员主要用于维护系统和管理实例
System用户 默认管理员通常用来管理数据库用户、权限和储存等
Scott用户 是Oracle的示例用户,包含四张范表,默认口令是tiger
注意:建议日常的管理任务使用system用户登录Oracle数据库服务器。如果执行备份、恢复、更改数据库的任务,必须以sys用户登录Oracle数据库服务器。
使用plsql视图工具打开登录Oracle:
我们发现,这时候时需要打开监听的。打开监听服务后登录scott用户
忘记密码,修改密码:
1.无密码登录:sqlplus /nolog
2.以管理员身份做连接:conn / as sysdba;
3.修改用户密码:alter user 用户名 identified by ‘密码’;
SQL语言分类
数据定义语言,简称DDL。用于创建、修改和删除数据库对象。如:create table、
Alter table、drop table等
数据操纵语言,简称DML。用于操纵数据库数据。如select、update、delete、insert等
数据控制语言,简称DCL。用于授予权限和撤销权限的操作。包括grant(授予权限)revoke(撤销权限)。DCL语言可以自动提交事物
事物控制语言,简称TCL。用于维护数据的一致性。包括commit(提交事物)、rollback(回滚事物)、savepoint(设置保存点)
Oracle常用数据类型
1、字符类型
Char 固定长度字符串,长度不足时以空格补充,最多储存2000个字节
Vachar2 可变长度字符串,最多储存4000个字符。
2、数值类型
Number(m)/Number(m,n) 可以储存正数、负数、零、定点数和精度为38位的浮点数。M表示精度,也就是总位数,n表示小数点后面的位数
3、日期类型
Date类型,长度是7个字节,年月日时分秒、精确到时分秒
Timestamp 精确到毫秒、纳秒,又称时间戳。
4、大数据类型
CLOB大字符串对象类型
BLOB大二进制类型
注意:Oracle支持integer、float、double等数值类型,建议采用自身的number类型。Oracle也支持varchar建议采用varchar2类型
alter table 命令:
1、向已经创建的表中添加一列
格式:alter table 表名 add 列名 数据类型;
2、修改表中指定列的数据类型和类型长度
格式:alter table 表名 modify 列名 数据类型;
3、删除表中指定的列
格式: alter table 表名 drop column 列名;
4、给表中添加约束
添加唯一约束:
unique 或主键约束 primary key,格式一致
格式:alter table 表名 add constraint 约束名 约束的类型(列名)
添加外键约束:
alter table 表名 add constraint 约束名 foreign key (列名)references 表名(主键列)
添加检查约束check:
格式: alter table 表名 add constraint 约束名 check(条件)
在Oracle中是没有自增的,这是Oracle和MySQL的区别;
那么,如果我们想要添加数据怎么办,这和我们的添加语句是一样的
insert into 表名(列名1,列名2.。。)values(列值1,列值2.。。)
sql序列实现自增
序列(sequence)是一个命名的序列生成器,它能以串行的方式生成一系列顺序整数,序列生成最大38为的整数。
Start with 用于指定序列的起始值
Increment by 用于指定序列的增量,如果去负数,则为递减序列
Minvalue | nominvalue 指定序列是否又最小数
Maxvalue | nomaxvalue 指定序列是否有最大数
Cycle | nocycle 指定序列达到最大之后,是否从新从最小值开始产生
Cache | nocache 指定是否在缓存中保存预先分配的序列值,如果选择cache,可以提高获取序列的速度
Order | noorder 是否保存序列值是否唯一和有序
语法: create sequence 序列名 序列相关语句
创建好的序列怎么取出来?
使用序列时,需要用到序列的两个伪列nextval和currval,其中nextval返回的序列下一个值。Currval返回序列当前值
不能向虚表dual插入数据,但是可以使用该表来选择系统变量,或求一个表达式
sql命令实现增改改查
添加数据:
Insert into 表名(列名1,列名2,。。。)values(列值1,列值2,。。。);
修改语句:
语法:update 表名 set 列名=列值 where 条件
删除语句
语法:delete from 表名 where 条件
Truncate table 表名 (这是清除表的意思,不可以加条件)
查询:
语法:select 列名1,列名2,。。。from 表名
Join 表名2 on。。。
Lift join 表名3。。。
Right join 表名4。。。
Where 条件
Group by
Having
Order by
查询语句:
单行子查询
子查询是指嵌套在其他SQL语句中的查询,它可以出现在SELECT、WHERE、FROM等语句中,使用子查询,可以用一系列简单的查询构成复杂的查询,从而增强SQL语句的功能,而单行子查询指的是不向外层查询返回记录或者只返回一条记录
例:要求查询工资最高的雇员信息。
SELECT EMPNO, ENAME, SAL, HIREDATE FROM EMP WHERE SAL= (SELECT MAX (SAL) FROM EMP);
多行子查询
多行子查询可以向父查询返回多行记录。但在where语句中使用多行子查询时,必须使用多行运算符(IN、NOT IN、EXISTS、NOT EXISTS、ALL和ANY等)。
例:要求查询工资高于部门20中所有员工的雇员信息。
SELECT ENAME, JOB, SAL, DEPTNO FROM EMP WHERE SAL >= ALL (SELECT SAL FROM EMP WHERE DEPTNO=20);
相关子查询
相关子查询是指引用了父查询中某些列的子查询,一般可以在SELECT或WHERE语句中使用相关子查询。
例:查询负责管理其他雇员的管理员信息。
SELECT ENAME, JOB, SAL, DEPTNO FROM EMP A
WHERE EXISTS (SELECT * FROM EMP B WHERE B.MGR = A.EMPNO);
多列子查询(in :表示相应字段在子集合字段中对应的值。)
例:查询各部门中工资最低的雇员信息 。
select * from emp where (sal,deptno) in (select min(sal),deptno from emp
group by deptno)order by deptno;
分页查询
1、Rownum
是一个伪列,它会根据返回的记录生成一个序列化的数字。可以使用Rownum列返回查询结果集中前N条记录
select rownum,deptno,ename,job,mgr,hiredate from emp where rownum<10
2、分页实现(注意此处rownum必须取别名。)
例:每5行为一页,现在要显示第2页,就是要显示第6行到第10行
select e.* from ( select rownum r,deptno,ename,job,mgr,hiredate from emp ) e Where r>5 and r<11;
select * from ( select rownum r,empno,
deptno,ename,job,mgr,hiredate from emp where rownum<11) e Where r>5;