数据库
数据库的前世今生
1:为什么需要数据库
随着时代的发展,pc互联网时代进入到移动互联时代,目前是5G时代,可持设备越来越多,无时无刻不在制造数据。
目前需要一套可以持久化存储数据的软件/工具,帮助我们去存储海量数据。
截止目前,我们学习过的可以存储数据的有:
变量(单一、内存)-> int num = 10;
对象(多个,多个数据之间存在逻辑关系,内存) User u = new User(no:10,age:15,name:"张三")
数组(多个,多个数据之间存在逻辑关系,内存) User[] users = new User[]{user1,user2.....};
集合(多个,多个数据之间存在逻辑关系,内存) List、Set、Map
IO流
File 文件可以将数据存储到磁盘上,持久化存储
ObjectOutputStream 可以将java中一个对象通过对象流序列化到本地文件去
xml
xml 存放数据的一种格式
<teachers>
<name>老薛</name>
<age>18</age>
<sal>$100000000</sal>
<students>
<student>
<name>张二狗</name>
</student>
<student>
<name>憨憨</name>
</student>
</students>
</teachers>
<!--解析xml比较费劲 一套xml要编写对一个的解析规则-->
2:数据库解决的实际问题
1:数据的持久化存储
2:维护了数据与数据之间的关系
3:存储的数据量很大
4:各种备份以及回退策略,避免数据的误删除
3:数据库的优缺点
大:存储数据海量
安全:不能出现频繁的数据丢失 最好保证在特定场景下是不可以丢失数据的
检索速度快:要求在极短的时间内要检索到需要查询的数据信息
4:数据库的发展历史
层级结构存储 文件存储
网状结构存储 有向图
关系型结构存储 二维表格
oracle: oracle(神谕) mysql
微软: sqlserver
IBM: DB2
手机: sqllite
非关系型结构存储 NoSQL not only sql
MongDB 、 Redis 、 HBase
安装卸载Oracle
前提
1:建议不联网
2:关闭防火墙
3:安装目录一定不能存在中文以及空格
卸载
1:卸载
2:关闭停止所有和oralce有关的服务
3:删除注册表
4:找到安装oracle数据库的安装目录 删除目录下的残存文件
安装
1:桌面版
2:密码: sys、system 等他们的密码 建议越简单约好
3:口令密码: scott 将密码设置为tiger
检测
--通过命令行:
>sqlplus /nolog
sql> conn sys/密码 as sysdba;
--如果出现已经连接 证明没有问题
>sqlplus /nolog
sql> conn scott/tiger;
--如果出现已经连接 证明没有问题
数据库中的数据存储
数据库中的流程分析
[外链图片转存失败(img-KWXeKzsh-1565012408900)(C:\Users\wawjy\Desktop\system.PNG)]
[外链图片转存失败(img-KlfdWMcu-1565012408903)(C:\Users\wawjy\Desktop\表.PNG)]
[外链图片转存失败(img-L1MxDuB5-1565012408905)(C:\Users\wawjy\AppData\Roaming\Typora\typora-user-images\1564977349237.png)]
实质上:
客户端给服务器发送sql指令对于当前数据库进行crud操作是通过oracle中的实例完成。
一个数据库服务器中存在多个库信息,默认情况下会创建一些 用户库、临时库等等
一个库中可以存储多张表,数据实际是存储在表中
一个表中:
表结构+行记录
表结构:
列的类型以及列的名称
行记录:
存储的每行数据信息
记住:oracle中的表示隶属于用户的,如果当前用户对于表没有权限 是无法进行操作的。
SQL
命令:
-- 连接 连接数据库服务器 免登录
sqlplus /nolog
-- 登录指令
-- conn 用户名/密码@实例
conn sys/123456 as sysdba;-- 通过sys/123456账户使用系统管理员登录
sql语句的语法规则
1:不区分大小写的 (推荐大写)
2:一行sql语句通过`;`结束
3: 为了好看,一般情况下将长的sql语句会折行处理
sql的分类:
DCL: 数据控制语言:
对于库、表做CRUD
DDL: 数据定义语言:
对于用户以及库进行操作(创建用户、删除用户、给用户授权。。。。)
DML: 数据管理语言:
DML:针对于数据的增加、删除、修改 写操作
DQL:针对于数据的查询操作 读操作
事务控制:
提交、回滚、设置回滚点
DCL
--1:创建用户 大权限用户创建用户
--create user 用户名 identified by 密码;
-- 创建一个张三用户 密码是123
create user zs identified by 123;
--2:授权用户 大权限用户授权用户
-- grant 权限1,权限2 to 用户名;
-- 给张三用户授权 连接权限
grant connect to li;
-- 给张三用户授权 表权限
-- grant 权限1,权限2 on 所属人.所属表 to 用户名;
grant select,insert on scott.emp to li;
-- 3:撤销权限
-- revoke 权限1,权限2 from 用户名;
-- 撤销li用户的查看以及插入权限
revoke select,insert on scott.emp from li;
-- 4:删除用户
-- drop user 用户名;
drop user li;
-- 5:对账户加锁
-- alter user 用户名 account lock;
alter user scott account lock;
-- 6:对账户解锁
-- alter user 用户名 account unlock;
alter user scott account unlock;
DDL
数据类型
数据类型 | 标识符 | 注意事项 |
---|---|---|
数值 | number | number(5)99999 number(5,2)999.99 |
字符串(固长) | char | char(2) ‘a’ --> 'a '实际存储长度小于指定长度通过空格补充长度 |
字符串(变长) | varchar/varchar2 | varchar(5) ‘a’ --> ‘a’ 根据实际存储长度决定当前串的长度 |
日期date | date | 年月日 |
日期 | datastamp | 年月日时分秒 |
blob | 二进制数据(不推荐使用) | 4G |
clob | 文本数据 | 4G (文章) |
-- 1:创建表
-- create table 表名(列名1 列类型1,列名2 列类型2.........);
create table tb_user(id number(4),uname varchar(5));
-- 2:查看表
select table_name from all_tables;
-- 3描述表
-- desc 表名(只能看表结构)
desc tb_user;
-- 3: 修改表
-- 前缀:alter table 表名
-- 3-1: 添加列
-- alter table 表名 add 列名 列类型;
alter table tb_user add age number(3);
-- 3-2:删除列
-- alter table 表名 drop column 列名 ;
alter table tb_user drop column age;
-- 3-3:修改列类型
-- alter table 表名 modify 列名 列类型;
alter table tb_user modify name varchar(4);
-- 3-4:修改列名
-- alter table 表名 rename column 旧列名 to 新列名l
alter table tb_user rename coloumn name to uname;
-- mysql
-- alter table 表名 modify 旧列名 新列名 数据类型;
-- 3-5:修改表名
-- alter table 表名 rename to 新表名;
alter table tb_user rename to t_user;
– 3-4:修改列名
– alter table 表名 rename column 旧列名 to 新列名l
alter table tb_user rename coloumn name to uname;
– mysql
– alter table 表名 modify 旧列名 新列名 数据类型;
– 3-5:修改表名
– alter table 表名 rename to 新表名;
alter table tb_user rename to t_user;