Oracle 学了 有一年多了,前段时间做项目发现,遇到了很多的问题,今天写一篇博客总结一下,如果各位大哥觉得小弟写的不错的话, 关注一下啦! 嘻嘻 ,那我们先来了解Oracle的创始人
oracle 创始人 拉里·埃里森
就是图上那个老哥, 他的名字叫做 拉里·埃里森, 下面是他的简介 :
拉里·埃里森被称为”硅谷花花公子”,美国犹太人,俄罗斯移民,1944年出生在曼哈顿,他的未婚妈妈只有19岁。埃里森由舅舅一家抚养,在芝加哥犹太区中下阶层长大,那时贫富的差别巨大。学生时代的埃里森并没有显示出超常的素质和成绩,在学校他性格非常胆小孤僻,独来独往,不过却十分注重打扮和享受,在别的孩子还是由父母来理发时,他却请专业理发师打理。
拉里·埃里森和三个朋友合伙于1977年成立了软件开发研究公司,其个人持股60%
只会软件开发研究公司为美国中央情报局开发量名为oracle 数据库,从此名声大噪音
软件开发研究公式也因此改名为 oracle
Oracle11默认用户名和密码
安装Oracle时,若没有为下列用户重设密码,则其默认密码如下:
用户名 / 密码 | 登录身份 | 说明 |
---|---|---|
sys/change_on_install | SYSDBA 或 SYSOPER | 不能以 NORMAL 登录,可作为默认的系统管理员 |
system/manager | SYSDBA 或 NORMAL | 不能以 SYSOPER 登录,可作为默认的系统管理员 |
sysman/oem_temp | sysman | 为 oms 的用户名 |
scott/tiger | NORMAL | 普通用户 |
aqadm /aqadm | SYSDBA 或 NORMAL | 高级队列管理员 |
Dbsnmp/dbsnmp | SYSDBA 或 NORMAL | 复制管理员 |
1989年 oracle 进入中国以甲骨文命名
启动的服务
-
oracle核心服务——OracleServiceORCL
-
oracle监听服务——OracleOraDb11g_home1TNSListener
-
oracle数据库工作日程调度(没有工作日程安排不用启动,占资源)——OracleJobSchedulerORCL
Sql Server与Oracle最大的不同
-
SQL SERVER 号称百万级数据(一个表的数据),但是其实做多20万条数据,超过20万条数据就用Oracle;
-
Sql中可以随时随意的创建数据库;但Oracle只有一个数据库,一台电脑只会安装一个数据库,Oracle只有账户。
账户、表空间、数据库、表空间
案例:两个同学创建2个不同的数据库
这两个同学都要在Oracle中找自己的数据库,刚说了一个Oracle只有一个数据库,怎么办?为两个同学各创建一个账户,给 账户开辟数据库空间----表空间(TableSpace)。
账户开辟数据库空间----表空间(TableSpace)。
表空间代替了Sql里面的数据库,创建数据库就是开辟账户空间。
注意:Oracle为A账户开辟个空间,为B账户开辟个空间,请问A和B是不是在用同一个数据库?不同账号之间能不能互访?
答:A和B在同一个数据库;但是不能互访,除非开了访问权限
数据库
Oracle数据库是数据的物理存储。这就包括(数据文件ORA或者DBF、控制文件、联机日志、参数文件)。其实Oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库,它包含物理数据、数据库管理系统(也即物理数据、内存、操作系统进程的组合体)。可以看作是Oracle就只有一个大数据库。
查询当前数据库名: (本人返回JANET)
select name from v$database;
注:使用SQLplus时,在终端输入sqlplus或者直接在搜索栏输入sqlplus(后者是调出sqlplus桌面应用)——>输入用户名密码——>成功后回车,即可输入sql语句,必须使用;作为结束符。
一个Oracle实例(Oracle Instance)有一系列的后台进程(Backguound Processes)和内存结构(Memory Structures)组成。
一个数据库可以有n个实例。
用Oracle官方描述:实例是访问Oracle数据库所需的一部分计算机内存和辅助处理后台进程,是由进程和这些进程所使用的
内存(SGA)所构成一个集合。其实就是用来访问和使用数据库的一块进程,它只存在于内存中。就像Java中new出来的实例对象
一样。我们访问Oracle都是访问一个实例,但这个实例如果关联了数据库文件,就是可以访问的,如果没有,就会得到实例不可
用的错误。
实例名指的是用于响应某个数据库操作的数据库管理系统的名称。它同时也叫SID。实例名是由参数instance_name决定的。
查询当前数据库实例名:select instance_name from v$instance;
Oracle 一些基础的了解
DDL : 数据库模式定义语言,关键字:create
DML : 数据操纵语言,关键字:Insert、delete、update
DCL : 数据库控制语言 ,关键字:grant、remove
DQL : 数据库查询语言,关键字:select
结构化查询语言 (Structured Query Language, SQL),Oracle 中的 SQL 不区分大小写只有在文本数字值得时候才会检查
注 : 当创建表或列名的时候使用双引号括起来就可以创建大小写敏感的列名或表名,但是不推荐这样做
SQLPlus 是 Oracle 的一种操作数据库数据和对数据库执行即时查询的工具,甚至还可以作为代码生成器来使用
逻辑判断 : = > >= < <= != ^= <>
!= ^= <> 这3个都表示不等于
注 : 在进行数据类型比较时,一定要考虑编码情况,VARCHAR2 和 CHAR 是字符比较,如果列数据类型为 NUMBER 则 12 > 9,如果是字符比较则 9 > 12 因为字符 9 比字符 1要大
DESCRIBE : 查询表结构
SQL> describe newspaper;
LIKE 执行模式匹配 : _表示一个字符 %表示任意多个字符
NULL 表示该列是否存在数据,如果没有数据,就说明该列是 null
IS NULL,IS NOT NULL
IN : 在某几个指定项中
NOT IN : 不在几个指定项中
BETWEEN AND : 在指定范围之间
NOT BETWEEN AND : 不在指定范围之间
AND : 同事满足两边的条件
OR : 只满足其中一边的条件
优先级 : () 优先级最高,乘除次之,加减法最后,AND 的优先级高于 OR
表
使用 CREATE TABLE 关键字创建表
SQL> CREATE TABLE trouble(city VARCHAR2(13) NOT NULL,sample_date DATE NOT NULL,noon NUMBER(3,1),midnight NUMBER(3,1),precipitation NUMBER);
表明和列名必须以由字母、数字和下划线,长度为1~30个,并且名称必须唯一,不使用双引号括起来时不考虑字母大小写,使用双引号括起来时就要考虑大小写,建议不要括起来否则可能会给开发人员和用户造成麻烦
在设计表时需要考虑字符(CHAR 和 VARCHAR2)的最大宽度,并设置 NUMBER 精度
注 : 1> 使用宽的 VARCHAR2 存储数据不会浪费空间,但是会对默认的 SQL*Plus 列格式产生影响
2> NUMBER(3,1) 3表示存储数字位数,1表示小数点右边的位数 小数部分的长度比较大会进行四舍五入来达到指定精度
定义约束 : 表添加的约束越多那么维护数据的工作就越少,但更新数据花的时间就越长
1> 候选键(condidation key) : 是一列或多列的组合,其唯一地标识表中的一行
创建 UNIQUE 约束时,将创建唯一地索引来强制值得唯一性。在主键约束中,主键的列中至少有一列必须是 NOT NULL
SQL> CREATE TABLE trouble(
city VARCHAR2(13) NOT NULL,
sample_date DATE NOT NULL,
noon NUMBER(4,1),
midnight NUMBER(4,1),
precipitation NUMBER,
CONSTRAINT trouble_uq UNIQUE(city,sample_date)
);
2> 主键(primary key) : 具有特殊性质的候选键之一,可以仅有一个主键,并且主键列不能包含 NULL 值
SQL> CREATE TABLE trouble(
city VARCHAR2(13),
sample_date DATE,
noon NUMBER(4,1),
midnight NUMBER(4,1),
precipitation NUMBER,
CONSTRAINT trouble_pk PRIMARY KEY(city,sample_date)
);
# 对于但主键,可以使用如下方式定义
SQL> CREATE TABLE author(
author_name VARCHAR2(50) PRIMARY KEY,
comments VARCHAR2(100)
);
3> 指定索引表空间 : UNIQUE约束和 PRIMARY KEY 约束创建索引,索引默认存储在表空间中
SQL> CREATE TABLE author2(
author_name VARCHAR2(50),
comments VARCHAR2(100),
CONSTRAINT author2_pk PRIMARY KEY(author_name) USING INDEX TABLESPACE USERS
)
注 : 在大多数默认安装中,会创建 USERS 表空间,他是默认表空间
<1> 外键(foreign key) : 也叫完整性约束,指明外键值对应另一个表中主键的实际值
SQL> CREATE TABLE bookshelf(
title VARCHAR2(100) PRIMARY KEY,
publisher VARCHAR2(20),
category_Name VARCHAR2(20),
rating VARCHAR2(2),
CONSTRAINT bookshelf_fk FOREIGN KEY(category_Name) FERENCES category(category_name));
<2> CHECK约束 : 指定某个表达式,表达式对于表中的每一行数据都必须始终为真
SQL> CREATE TABLE rating_with_check(
rating NUMBER(1) CHECK(rating<=8),
rating_description VARCHAR2(50)
);
4> 命名约束 : 可以对约束命名,如果约束名使用一种有效的命名模式,能更好地识别和管理约束。约束名应该标识出它所作用的表和它所表示的约束类型。创建时如果没有指定约束名称,Oracle 会生成名称大多以 SYS_C##### 的形式因此最好自己命名
删除表 : 使用 DROP TABLE table_name 即可
SQL> DROP TABLE trouble;
使用 TRUNCATE 可以高效的删除表中的所有数据并回收空间,而不从数据库中删除删除表的定义
从 Oracle10g 开始,删除表仍保留表空间,可以在 “回收站” 中来访问,如果要从回收站中清除,使用 PURGE 子句
SQL> DROP TABLE trouble PURGE;
如果表已经删除,可以从 “回收站” 中清除所占的空间
SQL> PURGE TABLE trouble;
清除 “回收站” 中所有内容
SQL> PURGE RECYCLEBIN;