- 人工管理阶段
- 文件管理阶段
- 数据库系统阶段
人工管理阶段
- 数据不保存
- 没有对数据进行管理的软件系统
- 没有文件的概念
- 一组数据对应一个程序,数据是面向应用的
文件管理阶段
- 数据需要长期保存在外存上供反复使用
- 程序之间有一定的独立性
- 文件的形式已经多样化
- 数据的存取基本上以记录为单位
数据库系统阶段
-
采用复杂的结构化的数据模型
数据库不仅要描述数据本身,还要描述数据之间的联系。这种联系是通过存取路径来实现的
-
较高的数据独立性
-
最低的冗余度
数据库的主要特点:
-
实现数据共享
数据共享包含所有用户可同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数 据库,并提供数据共享。
-
减少数据的冗余度
同文件系统相比,由于数据库实现了数据共享,从而避免了用户各自建立应用文件。减少了大量 重复数据,减少了数据冗余,维护了数据的一致性。
-
数据的独立性
数据的独立性包括数据库中数据库的逻辑结构和应用程序相互独立,也包括数据物理结构的变化 不影响数据的逻辑结构。
-
数据实现集中控制
文件管理方式中,数据处于一种分散的状态,不同的用户或同一用户在不同处理中其文件之间毫 无关系。利用数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数 据间的联系。
-
数据一致性和可维护性,以确保数据的安全性和可靠性
- 安全性控制:以防止数据丢失、错误更新和越权使用;
- 完整性控制:保证数据的正确性、有效性和相容性;
- 并发控制:使在同一时间周期内,允许对数据实现多路存取,又能防止用户之间的不正常 交互作用;
- 故障的发现和恢复:由数据库管理系统提供一套方法,可及时发现故障和修复故障;
-
故障恢复 由数据库管理系统提供一套方法,可及时发现故障和修复故障,从而防止数据被破坏。数据库系 统能尽快恢复数据库系统运行时出现的故障,可能是物理上或是逻辑上的错误。比如对系统的误 操作造成的数据错误等。
-
OrcaleServiceXE服务,如果不启动的话,Oracle无法正常使用,也不能sqlplus登录到oracle数据库中
-
OracleXETNSListener服务,如果不启动的话,就无法使用oracle自带管理系统登录到数据库中,之 后也无法在代码中使用JDBC连接到数据库中
Oracle自带管理系统登录地址:http://127.0.0.1:8080/apex/
- 成功安装oracle
- 相关服务已经启动
- 8080端口没有被占用
sqlplus 是oracle自带的工具,可以使用其命令登录到oracle数据中,并执行用户编写的sql语句。
查看系统中sqlplus命令行的所在位置:
win+r cmd where sqlplus
在sqlplus中,使用指定账号,登录到oracle数据库中
sqlplus 用户名/密码 //普通用户登录 sqlplus briup/密码 //管理员用户登录 sqlplus system/密码 //使用DBA的身份登录,这种情况不需要密码,但是这种情况需要当操作系统的用户有权限才行 sqlplus "/as sysdba"
登录成功后,可以查看当前登录的账号是谁
show user
清屏
//Windows系统中 $CLS //或者 $cls //Ubuntu系统中 !clear
退出
exit2.5会话
登录成功后,默认的会话是中文的
会话修改为英文环境
alter session set in nls_langage=english;
改回中文
alter session set in nls_langage='simpified chinese';2.6 用户
创建用户:
使用管理员登录后,还可以使用命令创建一个新的用户,并设置密码以及授权
//创建用户toto,设置密码toto create user toto identified by toto; //把角色connect和resources授权给toto账号 grant connect,resource to toto;
- connect 角色,基本的连接
- resource角色,程序开发
- DBA角色,数据库管理
切换用户
conn //或者 conn 用户名/密码
删除用户
drop user toto cascade;2.7 导入
s_region,区域表:
s_emp,员工表
s_dept,部门表
查看当前用户有哪些表:
show user; select table_name from user_tables;
需要导入的sql文件:table.sql
alter session set nls_language=english;
CREATE TABLE s_dept(
id NUMBER(7) ConSTRAINT s_dept_id_nn NOT NULL,
name VARCHAr2(25) ConSTRAINT s_dept_name_nn NOT NULL,
region_id NUMBER(7),
ConSTRAINT s_dept_id_pk PRIMARY KEY (id),
ConSTRAINT s_dept_name_region_id_uk UNIQUE (name, region_id)
);
INSERT INTO s_dept VALUES (10, 'Finance', 1);
INSERT INTO s_dept VALUES (31, 'Sales', 1);
INSERT INTO s_dept VALUES (32, 'Sales', 2);
INSERT INTO s_dept VALUES (33, 'Sales', 3);
INSERT INTO s_dept VALUES (34, 'Sales', 4);
INSERT INTO s_dept VALUES (35, 'Sales', 5);
INSERT INTO s_dept VALUES (41, 'Operations', 1);
INSERT INTO s_dept VALUES (42, 'Operations', 2);
INSERT INTO s_dept VALUES (43, 'Operations', 3);
INSERT INTO s_dept VALUES (44, 'Operations', 4);
INSERT INTO s_dept VALUES (45, 'Operations', 5);
INSERT INTO s_dept VALUES (50, 'Administration', 1);
COMMIT;
/
CREATE TABLE s_emp(
id NUMBER(7) ConSTRAINT s_emp_id_nn NOT NULL,
last_name VARCHAr2(25) ConSTRAINT s_emp_last_name_nn NOT NULL,
first_name VARCHAr2(25),
userid VARCHAr2(8),
start_date DATE,
comments VARCHAr2(255),
manager_id NUMBER(7),
title VARCHAr2(25),
dept_id NUMBER(7),
salary NUMBER(11, 2),
commission_pct NUMBER(4, 2),
ConSTRAINT s_emp_id_pk PRIMARY KEY (id),
ConSTRAINT s_emp_userid_uk UNIQUE (userid),
ConSTRAINT s_emp_commission_pct_ck
CHECK (commission_pct IN (10, 12.5, 15, 17.5, 20)));
//
INSERT INTO s_emp VALUES (1, 'Velasquez', 'Carmen', 'cvelasqu',to_date('03-MAR90 8:30', 'dd-mon-yy hh24:mi'), NULL, NULL, 'President',50, 2500, NULL);
INSERT INTO s_emp VALUES (2, 'Ngao', 'LaDoris', 'lngao','08-MAR-90', NULL, 1,
'VP, Operations',41, 1450, NULL);
//
INSERT INTO s_emp VALUES (3, 'Nagayama', 'Midori', 'mnagayam','17-JUN-91', NULL,
1, 'VP, Sales',31, 1400, NULL);
INSERT INTO s_emp VALUES (4, 'Quick-To-See', 'Mark', 'mquickto','07-APR-90',
NULL, 1, 'VP, Finance',10, 1450, NULL);
INSERT INTO s_emp VALUES (5, 'Ropeburn', 'Audry', 'aropebur','04-MAR-90', NULL,
1, 'VP, Administration',50, 1550, NULL);
INSERT INTO s_emp VALUES (6, 'Urguhart', 'Molly', 'murguhar','18-JAN-91', NULL,
2, 'Warehouse Manager',41, 1200, NULL);
INSERT INTO s_emp VALUES (7, 'Menchu', 'Roberta', 'rmenchu','14-MAY-90', NULL,
2, 'Warehouse Manager',42, 1250, NULL);
INSERT INTO s_emp VALUES (8, 'Biri', 'Ben', 'bbiri','07-APR-90', NULL, 2,
'Warehouse Manager',43, 1100, NULL);
INSERT INTO s_emp VALUES (9, 'Catchpole', 'Antoinette', 'acatchpo','09-FEB-92',
NULL, 2, 'Warehouse Manager',44, 1300, NULL);
INSERT INTO s_emp VALUES (10, 'Havel', 'Marta', 'mhavel','27-FEB-91', NULL, 2,
'Warehouse Manager',45, 1307, NULL);
INSERT INTO s_emp VALUES (11, 'Magee', 'Colin', 'cmagee','14-MAY-90', NULL, 3,
'Sales Representative',31, 1400, 10);
INSERT INTO s_emp VALUES (12, 'Giljum', 'Henry', 'hgiljum','18-JAN-92', NULL, 3,
'Sales Representative',32, 1490, 12.5);
INSERT INTO s_emp VALUES (13, 'Sedeghi', 'Yasmin', 'ysedeghi','18-FEB-91', NULL,
3, 'Sales Representative',33, 1515, 10);
INSERT INTO s_emp VALUES (14, 'Nguyen', 'Mai', 'mnguyen','22-JAN-92', NULL, 3,
'Sales Representative',34, 1525, 15);
INSERT INTO s_emp VALUES (15, 'Dumas', 'Andre', 'adumas','09-OCT-91', NULL, 3,
'Sales Representative',35, 1450, 17.5);
INSERT INTO s_emp VALUES (16, 'Maduro', 'Elena', 'emaduro','07-FEB-92', NULL, 6,
'Stock Clerk',41, 1400, NULL);
INSERT INTO s_emp VALUES (17, 'Smith', 'George', 'gsmith','08-MAR-90', NULL, 6,
'Stock Clerk',41, 940, NULL);
INSERT INTO s_emp VALUES (18, 'Nozaki', 'Akira', 'anozaki','09-FEB-91', NULL, 7,
'Stock Clerk',42, 1200, NULL);
INSERT INTO s_emp VALUES (19, 'Patel', 'Vikram', 'vpatel','06-AUG-91', NULL, 7,
'Stock Clerk',42, 795, NULL);
INSERT INTO s_emp VALUES (20, 'Newman', 'Chad', 'cnewman','21-JUL-91', NULL, 8,
'Stock Clerk',43, 750, NULL);
INSERT INTO s_emp VALUES (21, 'Markarian', 'Alexander', 'amarkari','26-MAY-91',
NULL, 8, 'Stock Clerk',43, 850, NULL);
INSERT INTO s_emp VALUES (22, 'Chang', 'Eddie', 'echang','30-NOV-90', NULL, 9,
'Stock Clerk',44, 800, NULL);
INSERT INTO s_emp VALUES (23, 'Patel', 'Radha', 'rpatel','17-OCT-90', NULL, 9,
'Stock Clerk',34, 795, NULL);
INSERT INTO s_emp VALUES (24, 'Dancs', 'Bela', 'bdancs','17-MAR-91', NULL, 10,
'Stock Clerk',45, 860, NULL);
INSERT INTO s_emp VALUES (25, 'Schwartz', 'Sylvie', 'sschwart','09-MAY-91',
NULL, 10, 'Stock Clerk',45, 1100, NULL);
COMMIT;
---------------------------------------------------
CREATE TABLE s_region(
id NUMBER(7) ConSTRAINT s_region_id_nn NOT NULL,
name VARCHAr2(50) ConSTRAINT s_region_name_nn NOT NULL,
ConSTRAINT s_region_id_pk PRIMARY KEY (id),
ConSTRAINT s_region_name_uk UNIQUE (name)
);
INSERT INTO s_region VALUES (1, 'North America');
INSERT INTO s_region VALUES (2, 'South America');
INSERT INTO s_region VALUES (3, 'Africa / Middle East');
INSERT INTO s_region VALUES (4, 'Asia');
INSERT INTO s_region VALUES (5, 'Europe');
COMMIT;
将 table.sql 文件放置在桌面上,并且使用 sqlplus 命令从桌面路径下登录到oracle:
然后使用导入sql文件命令: @table.sql
也可以直接拖到窗口3.数据库对象
数据库对象是数据库的组成部分,常常用 CREATE 命令进行创建,可以使用 ALTER 命令修改,用 DROp 执行删除操作。常见的数据库对象有:
- 用户(user)
- 表(table)
- 视图(view)
- 索引(index)
- 触发器(trigger)
- 存储过程(procedure)
- 同义词(synonym)
- 序列(sequence)
SQL(Structured Query Language),结构化查询语言,是专门操作关系型数据库的一种语言
sql语句的分类:
-
DQL(Data Query Language),数据查询语言
用于检索数据库中的数据,主要是select语句
-
DML(Data Manipulation language)数据操纵语言
用于改变数据库中的数据,主要是INSERT ,UPDATE,DELETE语句
-
DDL(Date Define Language)数据操纵语言
用来建立,修改,删除数据库对象,主要是create,alter,drop,truncate语句
-
TCL (Transaction Control Language),事务控制语言
用于维护数据的一致性,主要是 COMMIT , ROLLBACK , SAVEPOINT 语句
-
DCL(Data Control Language),数据控制功能
用于执行权限授予和权限收回操作,主要是 GRANT , REVOKE 语句
sql,sqlplus,p;/sql的区别:;
- sql,结构化的查询语句,操作关系型数据库的语言
- SQL plus,oracle数据库软件自带工具,可以接收用户输入的sql语句,然后将sql执行结果显示出来
- pl/sql,程序化的sql语句,在sql语句的基础上加入一定的逻辑操作,如if for等
select 语句,可以通过列名,把一行行的数据给查询出来
注意1:语法中出现的[],表示该部分可有可无。
注意2:* 号表示所有列
注意3:col_name1,col_name2代表列名,如果有多个可以逗号隔开
查看表中的所有记录
select * from 表名
查看s_dept表中的三个字段:id, name,region_id
select id,name,region_id from s_dept;5.2 运算
查看每个员工的员工id,名字和年薪,月薪加200后的年薪
select id,name,salary*12 from s_emp sselect id,name,(salary+200)*12 from s_emp5.3 别名
在需要起别名的后面加 as 别名或者不用as select id, last_name as ln from s_emp; select id,last_name ln from s_emp;5.4 拼接
语法:
dual哑表,Oracle中独有的表,表示一张虚拟的表,可以用来进行运算等等
select 'xx'||'yy' from dual; 结果:xxyy5.5 nvl
使用nvl函数可以将null进行替换
select id,last_name,nvl(commission_pct,0) commission_pct from s_emp;5.6 distinct
使用关键字可以将重复数据去除
distinct关键字只可以放在select后面
查看所有员工的职位和部门id,同职位同部门的只显示一次
select distinct dept_id,title from s_emp;6sqlplus
Oracle中的插件
- buff中只能存储一条失去了语句,但是这条sql语句可能有很多行
- 每次放入其中的语句会把之前的sql语句覆盖
- 每次执行sql语句,都会把这个sql语句放到buff里面
sqlplus相关的语法:
- l 查看缓存中的sql语句
- a 在[定位]的那一行后面追加新的内容
- i 在[定位]的那一行下面插入新的一行
- c 替换[定位]的那一行中的某些字符串 ,格式为:c/老的字符串/新的字符串
- del 删除[定位]的那一行内容
- n 后面加内容可以重写这一行
- $ 后面跟一个终端命令,例如$cls清屏,linux中使用!
- / 执行缓存sql命令
- 清空buff里面的缓存: clear buffer
升序
asc:默认不写
desc:降序,必须写
8条件查询语法
select xx from 表名 where 比较操作表达式 select last_name,id from s_emp where id<5;
between and 操作符,表示在两个值之间
select * from 表名 where xx between yy and yy1;
like,模糊查询,在值不精确的时候用
- %,通配0到多个字符
- -,通配一个字符,并且是一定要有一个字符
- ,转义字符,需要使用 escape 关键字指定,转义字符只能转义后面的一个字符
is null ,判断值为null的时候使用,null值的判断不能使用等号
查看员工提成为为空的员工的id和名字
select id,last_name,commission_pct from s_emp where commission_pct is null;
and 、 or ,逻辑操作符,当条件有多个的时候可以使用:and 的优先级比or高



