简介说明
四大传统主流数据库:
Oracle MySQL SqlServer DB2
非关系型数据库: Redis MongoDB
主流数据库是关系型数据库:表与表之间是存在关联关系的
当我们说安装数据库的时候,指的是安装数据库服务
创建数据库的时候,指的是创建数据仓库
可以给数据仓库分成若干块,每一块就叫做一个表空间;
每个表空间都可以对应一个用户
初步使用数据库的时候,先创建一个用户,再给此用户指定一个表空间
如果不给用户提供创建表空间,就默认使用Oracle的默认表空间;为了安全期间,应该为每个用户都创建一个表空间
.DBF就是表空间文件的意思,表空间可以提高安全性。在表空间的用户只能访问存入当前表空间的内容
标准创建流程:
先创建表空间,创建用户让用户名与此表空间关联;
再建表,这样做的话,新建的表就会创建在刚才的表空间中;
最后再赋予登录,增删改权限即可
创建表空间---创建用户(关联表空间)---赋予登录权限---赋予增删改权限
查询所有表空间(系统和自己的管理员操作)
一、创建表空间(管理员操作)
create tablespace 表空间名
datafile '存储的路径'
size 10M
autoextend on
next 10M
datafile 用于设置物理文件名称
size 用于设置表空间的初始大小
autoextend on 用于设置自动增长,如果存储量超过初始大小,则自动扩容
next 用于设置扩容的空间大小
怎么删除表空间(管理员操作)
注意必须先用语句执行,再手动删除磁盘空间,否则Oracle会崩溃
drop tablespace 表空间名称
二、创建用户(管理员才可以创建用户)
--创建用户
create user 用户名
identified by 密码
default table 表空间名称
identified by 用于设置用户的密码
default tablespace 用于指定默认表空间名称
用户创建成功了,但是缺失某个权限,导致登录失败
login denied 登录拒绝;就是缺失登录权限
三、赋予登录权限
grant connect to 用户名;
当建表时,显示没有操作权限
四、赋予增删改查的权限
grant resource to 用户名
回收权限
注意:同级别不能“互相伤害”,就是删除回收平级用户
--回收登录权限
revoke connect from 用户名;
--回收增删改权限
revoke resource from 用户名;
五、赋予收回管理员权限
--给管理员权限
grant dba to 用户名;
--收回管理员权限
revoke dba from 用户名;
其他流程操作语法
Oracle有几个默认用户
Sys,system,scott
Sys,system是管理员;Scott是普通用户
重置普通密码(管理员)
sys as sysdba //作为系统管理员身份登录
alter user 用户名 identified by 密码
:
用户被锁定,解锁
--管理员执行:
alter user 用户名 account unlock;
删除用户(管理员)
删除用户时,如果有表则删除失败,因为安全起见;先删除所有表,再删除用户
--删除用户
drop user 用户名 cascade;
数据定义语言
Create创建 alter修改 drop删除
创建表空间
--创建表空间
create tablespace 表空间名
datafile '存储的路径'
size 10M
autoextend on
next 10M
创建用户
--创建用户
create user 用户名
identified by 密码
default table 表空间名称
创建表
default 向表中添加某个默认值
--创建表
create table 表名称(
字段名称 类型(长度),
字段名称 类型(长度)default ''
);
复制一个表
--利用现有的表创建新表,复制一个表
create table 新表名称 as select * from 旧表名称;
复制一个表(不复制表的信息,只保留表的类型)
--只复制表的类型
--Where1=2的意思就是,不相等,复制表的时候就不复制表的信息,只复制表的类型
Create table 新表名 as select * from 旧表名 where 1=2;
复制一个表(剔除重复数据)
--利用现有的表创建新表,复制的表中数据不重复
create table 新表名称 as select distinct * from 旧表名称;
新增约束
PK主键(Primary Key);UQ唯一(Unique )约束
CK检查(Check )约束;FK外键(Foreign Key)约束
--约束语法(可以直接在追加表后面)
alter table xx
add constraint 约束名 约束类型 具体约束说明
例如:
alter table product add constraint PK_PNO primary key (pno);
--添加年龄约束15~40
alter table stuInfo
add constraint checkAge check(stuAge>15 and stuAge<40);
删除约束
--删除约束
alter table 表名
drop constraint 约束名
用户被锁定
alter user 用户名 account unlock
删除表
--删除表
drop table 表名
数据操作语言
Insert插入 select选择 delete删除 update更新
插入数据
--向表中插入数据
insert into 表名 values('xxx',to_date('2020-02-02','yyyy-mm-dd hh24:mi:ss'));
--如果插入的是部分数据
insert into 表名(字段名称,字段名称……) values('xxx','xxx');
查询表中所有信息
--查询表中所有信息
select * from 表名
查询指定的信息
--查询指定的信息
select * from 表名 where 主键='xx';
选择指定的行列显示
--指定数据进行 行和列 显示
select xx,xx from 表名
筛选重复的行
--显示筛选重复的行
select distinct xx,xx from 表名
按照某个规则排序
--按照某个规则排序(年龄降序,学号升序)
select * from 表名 order by xxage DESC,xxno ASC;
--例如
--ascending 升序
select * from sc order by mark asc;
--descending 降序
select * from sc order by mark desc;
--默认显示是asc,可以为空
别名显示
--列表别名,就是自定义个名称
--'S'|| 学生编号前面有个S
select 'S'||stuNO 学号,stuName"姓 名" FROM 表名
例如,别名显示后降序排序
查询不包括某条件的字段
--not in 范围 !=不等于具体的值
-- !=的效率比not in高,not in 会造成全盘扫描造成索引异常
--部门编号不等于10 !=
select * from emp where deptno!=10;
--not in
select * from emp where deptno not in('10','20');
删除表中所有信息
--删除表中所有字段信息
delete from 表名
删除表中的某个信息
-- 删除表中的某个信息
delete from 表名 where 主键='xx'
--删除某个信息,多个信息可以and连接
delete from 表名 where xx=xx and xx=xx
修改表中的某个信息
--修改表中的某个信息
--一般都根据主键来修改数据
update 表名 set xx=xx,xx=xx where 主键=''
例如:
update 表名 set sname='james' where sid=2023;
事务控制语言
Commit提交 savepoint保存 pollback回拨
数据控制语言
Grant授予 revoke撤销
赋予登录权限
grant connet to 用户名
赋予增删改权限
--赋予增删改权限
grant resource to 用户名
赋予管理员权限
--赋予管理员权限
grant dba to 用户名
回收管理员权限
--回收管理员权限
revoke dba from 用户名
回收登录权限
--回收登录权限
revoke connect from 用户名
回收增删改权限
--回收增删改权限
revoke resource from 用户名
聚合函数
注:查询的emp表在scott用户里
AVG 求平均值
--avg()平均值
---求所有人平均工资
select avg(sal) from emp;
--求20号部门的平均工资
select avg(sal) 平均工资 from emp where deptno=20;
--求20号部门的平均工资 和 部门编号
select deptno,avg(sal) 平均工资 from emp where deptno=20 group by deptno;
--按照部门编号进行分组,求每组的平均工资
select deptno,avg(sal) from emp group by deptno;
MIN求最小值
--min()最小值
--求本公司薪资最低的人的工资
select min(sal) from emp;
--求20号部门工资最低的人
select min(sal) from emp where deptno=20;
--求本公司每个部门的最低工资
select deptno,min(sal) from emp group by deptno;
--分组,就添加group by
MAX求最大值
--max()最大值
--求本公司薪资最高的人的工资
select max(sal)最高工资 from emp;
--求30号部门工资最高的人
select max(sal)部门最高工资 from emp where deptno=30;
--求本公司每个部门的高工资
select deptno,max(sal) from emp group by deptno;
SUN求和
--sun()求和
--求公司每月要发的总工资
select sum(sal)总工资 from emp;
--求每个月给30号部分发的总工资
select sum(sal) from emp where deptno=30;
--求本公司每个部门的总工资
select deptno 部门编号,sum(sal)总工资 from emp group by deptno;
count累加
--count()累加
--求公司总人数
select count(*) from emp;
--求20号部门的人数
select count(*) from emp where deptno=20;
--最好不要用count(*);*代表查找所有字段
select deptno,count(*) from emp group by deptno;
--求每个部门的总人数
select deptno,count(empno) from emp group by deptno;
--每个部门的。。。值,只要2000以上的
select deptno 部门编号,max(sal) 最大值,AVG(sal) 平均值,min(sal) 最小值
from emp
group by deptno
having avg(sal)>2000;