oracle基础知识介绍(自己的笔记)

本文详细介绍了Oracle数据库的服务,包括数据库服务、监听器服务和企业管理器。讨论了用户管理,如角色和权限的分配,以及如何创建、修改和删除用户。还涵盖了数据表的创建、字段类型,如CHAR、VARCHAR2等,以及表的约束和索引。此外,提到了表空间的概念,它是Oracle数据库组织数据的基本单元。
摘要由CSDN通过智能技术生成

在这里插入图片描述

Oracle数据服务

OracleServiceXXX

数据库服务:这个服务会自动地启动和停止数据库

OracleHOME_NAMETNSListener

监听器服务:只有在数据库需要远程访问时才需要

OracleDBConsoleXXX

基于 web 方式的 Oracle 企业管理器 eom 控制台服务

OracleJobSchedulerXXX

Oracle 作业调度程序服务

补充:oracle的默认端口号1521

用户、角色、权限的关系

1.一个用户可以有多个角色(班长,学委等角色)

2、一个用户可以有多个权限(班长可以收作业,学委也可以收作业等权限)

3、一个权限也可以给多个用户(把收作业的权限给了班长与学委)

先创建用户给角色再给权限

oracle系统默认用户

system:是数据库内置的一个普通管理员

sys:用数据库的超级用户,必须以 sysdba 身份登录

scott:简单的样例帐户

sysman:企业管理器帐户

用户的补充:

CONNECT 角色:获取数据库连接,创建回话.

RESOURCE 角色:创建自己的表、序列、过程等.

DBA 角色:拥有所有的系统权限,包括无限制的空间限额和给 其他用户授予各种权限的能力.

创建用户

oracle用户,即user,通俗的讲就是访问oracle数据库的“人”。在oracle中,可以对oracle用户的各种安全参数进行控制,以维护数据库的安全性,这些概念包括模式(schema)、权限、角色、存储设置、空间限额、存取资源限制、数据库审计等。每个用户都有一个口令,使用正确的用户/口令才能登录到数据库进行数据存取

语句:create user e318 identified by 123456;

赋予e318用户connect,resource角色

语句:grant connect,resource to e318;

赋予角色通常都是to 谁

收回用户e318用户的角色

语句:revoke connect from e318;

收获角色通常都是从哪里收回即from

不要在创建的用户中执行以下权限

创建角色(但是这个角色没有任何的权限,你需要给它赋权限)跟mysql创建数据库类似吧

语句:create role e318_r1;

赋予角色权限

语句:grant create session,create table to e318_r1;

这个的是创建了一个会话 并且和一个表

收回角色权限

语句:revoke create table from e318_r1;

将自己创建的角色赋给用户

语句:grant e318_r1 to e318;

删除用户,角色

删除用户

语句:drop user e318;

删除角色

语句:drop role e318_r1;

锁定用户

alter user e318 account lock ;

解锁用户

语句:alter user e318 account unlock;

权限

create session:创建会话
create sequence:创建序列
create synonym:创建同名对象
create table:在用户模式中创建表
create any table:在任何模式中创建表
drop table:在用户模式中删除表
drop any table:在任何模式中删除表
create procedure:创建存储过程
execute any procedure:执行任何模式的存储过程
create user:创建用户
drop user:删除用户
create view:创建视图

什么是数据库

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库

DBMS:数据库管理系统(Database Management System)是一种操纵管理数据库的**大型软件,**用于建 立、使用和维护数据库,简称 DBMS

关系模型数据库

关系模型数据结构把一些复杂的数据结构归结为简单的二元 关系(即二维表格形式)

表:我们把二维表格称为“关系”,即平常说的表.每个“关系”都有个 名字即“关系名”,即平常说的表名
记录:表中的行称为记录,表示一个“实体”
字段:记录中的某一列成为字段,表示“实体”的某一个“属性

数据表的知识

1、实体完整性:主键

特点:唯一,非空

2、参照完整性或引用完整性:外键

3、域完整性

​ 3.1非空字段

​ 3.2唯一字段 如:用户名,手机号,邮箱

​ 3.3检查 如:年龄>=18 ,性别为男还是女

4、用户定义完整性

5、完整性约束条件

非空约束(not null)
唯一约束(unique)
主键约束(primary key)
外键约束(foreign key)
条件约束(check)

数据模型:

1、概率模型 (e-r模型)必考题

请添加图片描述

电商e-r图

请添加图片描述

2、逻辑模型

3、物理模型

建表中常用数据类型:

1、文本( char(n)、nchar(n)、varchar2(n)、nvarchar2(n)、long ) 如:姓名,手机号,订单编号

2、数字():年龄,价格

3、日期和时间( Date )

char:使用数据库字符集来存储数据,长度固定,未达到指定长度,自动补足空格;采用char或byte为计 量单位,最大存储长度为2000个字节;不指定最大长度,默认长度为1

varchar:使用数据库字符集存储数据,长度可变,未达到指定长度,不自动补足空格;采用char为计量 单位,最大存储长度为4000个字节;必须指定最大长度,长度最小值为1.

long数据类型用来存储较长文本(如:文章、小说等),最大长度限制是2GB,long类型主要用于不需要 作字符串搜索的长串数据,如果要进行字符搜索就要用varchar类型

  • date

Oracle最常用的日期类型用来保存日期和时间,date 表示的日期范围可以是公元前 4712 年 1 月 1 日至公
元 9999 年 12 月 31 日.date 类型是一个 7 字节的定宽日期/时间数据类型.它总是包含 7 个属性,包括:世
纪、世纪中哪一年、月份、月中的哪一天、小时、分钟和秒.这七个字节分别存储的是这 7 个属性.
比如:2022-12-05 12:30:43 存储的是120,122,12,5,13,31,44
date 类型在数据库中的存储固定为 7 个字节,格式为:
第 1 字节:世纪+100
第 2 字节:年(完整年-1900)
第 3 字节:月
第 4 字节:天
第 5 字节:小时+1
第 6 字节:分+1
第 7 字节:秒+1

  • Timestamp§
    常用的日期类型,它与date的区别是不仅可以保存日期和时间,还能保存小数秒,小数位数可以指定为0-9,默
    认为6位,所以最高精度可以到ns(纳秒),数据库内部用7或者11个字节存储,如果精度为0,则用
    7字节存储,与date类型功能相同,如果精度大于0则用8-11字节存储.
    (1秒=1000毫秒,1毫秒=1000微秒,1微秒=1000纳秒)
    格式为:
    第1字节:世纪+100
    第2字节:年(完整年-1900)
    第3字节:月
    第4字节:天
    第5字节:小时+1
    第6字节:分+1
    第7字节:秒+1
    第8-11字节:纳秒,采用4个字节存储,内部运算类型为整

如:

create table teacher(

教工号 文本 主键 ,

姓名 文本,

性别 数字,

职称 文本

);

create table coureses(

课程号 文本 主键,

课名 文本,

学时 数字,

学分 数字

);

一个字符会有多个字节 一个字节等于8位

ascii字符位一个字节

一个中文字符可能会有两个或多个字节

Oracle数据库字段数据类型

数据: char(n)、nchar(n)、varchar2(n)、nvarchar2(n)、long
char:使**用数据库字符集来存储数据,长度固定,未达到指定长度,自动补足空格;**采用char或byte为计
量单位,最大存储长度为2000个字节;不指定最大长度,默认长度为1
nchar:使用国家字符集来存储数据,长度固定,未达到指定长度,自动补足空格;采用char或byte为计量
单位,最大存储长度为2000个字节;不指定最大长度,默认长度为1
varchar2:使用数据库字符集存储数据,长度可变,未达到指定长度,不自动补足空格;采用char为计量
单位,最大存储长度为4000个字节;必须指定最大长度,长度最小值为1.
nvarchar2:使用国家字符集来存储数据,长度可变,未达到指定长度,不自动补足空格;采用char为计量
单位,最大存储长度为4000个字节;必须指定最大长度,长度最小值为1.
long数据类型用来存储较长文本(如:文章、小说等),最大长度限制是2GB,long类型主要用于不需要
作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型.
通过如下查询语句可以查询char与nchar所使用的字符集

注:oracle 中数字没有int 用的是number

建表1:

create table t_class(
class_no char(5) primary key,
class_name varchar2(100)

);

create table t_class(
class_no char(5) primary key,
class_name varchar(100)

);

#表创建好又给表加了注释 或者给部分字段加注释

comment on table t_class is ‘学生表’

comment on column xiaorui.t_class.class_no is ‘班级编号’ 表示:数据库下的表t_class的字段class_no的注释

查看表结构(describe的缩写):

语句:desc 表名 ;

删除表:

语句:drop table 表名;

建表2:

create table t_student(

stu_no char(9) primary key,

stu_name varchar(60),

sex number(1),

class_no char(5)

);

当表创建后,可以 通过sql语句或命令进行修改

添加字段:

alter table 表名 add 要添加的字段名 添加的字段类型 unique; unique表示约束意思表唯一可加可不加

如:alter table t_student add moblie char(11);

删除字段:

语句:alter table 表名 drop column 要删的列的名字;

如:alter table t_student drop column moblie;

修改字段:

语句:alter table 表名 modify 要修改的字段 类型;

如:alter table t_student modify stu_name varchar(200); 这个把上表字段的类型修改为200字符

表字段约束的添加与删除

给字段添加唯一约束:

语句:alter table 表名 add constraint 约束名 unqiue(要添加列的字段名);

如:alter table t_student add constraint US_mobile unqiue(stu_no); 表示给stu_no添加了一个唯一的限制条件 并且给限制取了一个名字 叫 US_mobile

给表字段添加检查约束:

语句:alter table 表名 add constraint 约束名 约束条件;

如:alter table t_student add constraint C_sex check (sex=1 or sex=2); 表示给number 一个选项:1表示男2表示女

删除表字段的约束:

语句:alter table 表名 drop constraint 约束条件的名字;

如:alterl table t_student drop constraint C_sex ; 表示删除性别的约束

添加外键约束(加外键的时候 双方都是主键):

语句:alter table 表名 add constraint 外键名 foreign key (要参照外表的字段)

​ references 参照表名(参照字段)

如:alter table t_student add constraint CF_class_no foreign key(class_no)

​ references t_class(class_no); 表示主表table中的class_no字段的数据 要参照外表t_class表的数据

建表3:

课程表

create table t_coures(

c_no char(4) primary key,

c_name varchar(100)

);

中间表或者关系表:学生课程关系表

直接在建表的时候就加入外键

create table t_teachar_course(
tea_cour_id number(38) primary key,
tea_id number(38),
cour_id number(38),
class_id number (38),
constraint FK_TEA_ID foreign key(tea_id) references t_teacher(tea_id),
constraint FK_COUR_ID foreign key(cour_id) references t_course(cour_id),
constraint FK_TC_CLASS_ID foreign key(class_id) references t_class(class_id)
);

范式(了解)

要点:
如果表设计不遵循范式的要求,会给表数据的修改、增加等操作带来"麻烦"
数据库范式分为1NF、2NF、3NF、BCNF、4NF、5NF.一般在设计表时,最多考虑到BCNF,正常考虑
到3NF;
符合高一级范式的设计,必定符合低一级范式,例如符合2NF的关系模式,必定符合1NF
范式优缺点:
结构合理,表含义容易理解及区分
冗余较小
但性能有所降低,多表查询比单表效率低下

sql语句

对于后缀为sql的文件如何运行:

1、可以登入可视化界面如navicat,然后选中一个表,点击右键选择运行sql文件

2、 sql文件(source+路径)
eg: source C:\Users\Maibenben\Desktop\test.sql

DDL语句data definition language 数据定义语言

操作有

create:数据库对象的创建

alter:修改数据库对象

drop:删除数据库对象

truncate:清空表数据

DML语句data management language数据操作语言 重要

  • insert

语法: insert into 表名[(字段1,字段2…字段n)] values(值1,值2…值3)

如:insert into t_class(class_no,class_name) values(‘001’,‘20计科1班’);

  • delete

语法: delete from 表名 [where 条件1,条件2…条件n]

如: delete from t_class where class_no=‘001’

  • update

语法: update 表名 set 字段1=值1,字段2=值2…字段n=值n [where 条件1,条件2…条件n]

如: – 将编号为002的班级名称修改成"20计科2班"
update t_class set class_name=‘20计科2班’ where class_no=‘002’

DCL语句data control language数据控制语言

就是经常使用的grant 授权 和revoke 回收

DQL语句data query language数据查询语言 重要

有时候可以给表加别名: as 随意名字

mysql中 一般用于字段取别名 表的别名可以不加

  • select查询

select 要查的字段 from 表名;

如:select name,sex from studnet; 表示查出姓名学号两列数据

  • 去掉重复的行:distinct

如:select distinct 字段 from student; 会去掉自动重复的数据

查询性别不为1的数据 不等于:<>, !=(编程中常用的不等于)

有时候可以用not

select * from student where sex<>1; 或者将<>改成!=

或者select* from student where not sex=1;

范围查找

select * from student where age between 20 and 30;查找 包括两端的值范围查找

或者用括号

select* from student where (age>20 and age<30);

对于有多个条件判断:or来连接

in(放入你要放的多个数据)可以看成同一个数组存的东西 虽然结果一样但是在程序中的使用效率不高

如:select*from T_EMPLOYEE WHERE HOMEPLACE in(‘合肥’,‘芜湖’);

匹配查询 肯定会考

like 一般匹配是文本类型的

% 表示匹配0个或多个字符

_ 表示匹配1一个字符

如:

select * from student where name like ‘%fff%’; 表示查出name字段为 fff

select *from student where name like ‘_王’; 表示查出 name 字段第二个为王的数据 且字段长度只能是二就是不会查出类似这种的 笑王狗 这种数据因 _ 它只能匹配一个字符

排序

order by 默认排序是从低到高

SELECT *from T_EMPLOYEE ORDER BY SALARY;可以理解为查表T_EMPLOYEE的薪水从低到高

SELECT *from T_EMPLOYEE ORDER BY SALARY asc;加个asc表示降序

SELECT *from T_EMPLOYEE ORDER BY SALARY desc;加个desc表示升序 但是它默认是升序,你可以不用加desc

SELECT *from T_EMPLOYEE ORDER BY SALARY asc,sex asc;表示对薪水进行升序 和 性别进行升序查询 因为性别我设置了 1为男 2为女可以排序

分组查询 肯定会考

无非就 是:

求平均:avg(字段)

统计数量: count(字段)

求和: sum(字段)

求最大值:max(字段)

求最小值: min(字段)

—统计查询
—统计员工表的总记录,记员工总人数
SELECT COUNT() FROM T_EMPLOYEE;
—可以加一个别名 as 后面是别名
SELECT COUNT(
) as 总人数 FROM T_EMPLOYEE;
—统计查询最高的月薪
SELECT MAX(SALARY) as 最高薪资 FROM T_EMPLOYEE;
—统计查询最低的月薪
SELECT MIN(SALARY) as 最低薪资 FROM T_EMPLOYEE;

—查询平均薪资
SELECT AVG(SALARY) as 平均薪资 FROM T_EMPLOYEE;
—查询所有员工所有月薪总和
SELECT SUM(SALARY) as 所有员工月薪总和 FROM T_EMPLOYEE;

—分组查询

分组 gruop by 但是这种是小分组 就是在avg,sum等函数操作完成之后 你可以再进行细的分组

SELECT DEP_NAME as 部门名称,
COUNT(1) as 总人数,
MAX(SALARY) as 最高月薪,
MIN(SALARY) as 最低月薪,
AVG(SALARY) as 平均月薪,
SUM(SALARY) as 总月薪
FROM T_EMPLOYEE
GROUP BY DEP_NAME; 就是查询每个部门(而对每个部门的分组就是group by 分组造成的)的人数,最高月薪,最低月薪,平均月薪,总月薪

请添加图片描述
注意:group by没有where

—分组筛选

—统计查询平均月薪不低于10000的部门信息,查询显示的字段:部门名称,平均月薪

SELECT DEP_NAME as 部门名称,
AVG(SALARY)as 平均月薪
FROM T_EMPLOYEE
GROUP BY DEP_NAME
HAVING AVG(SALARY)>=10000;

注意:对分组后的数据,进行条件判断需要用到having ,千万别用where

数字函数

ceil 向上取整数 重点

如: select ceil(2.1)from dual; 结果为:3

floor 向下取整数 重点

如: select floor(3.7) from dual; 结果为:3

—ROUND四舍五入 重点

round(n,m) 将n四舍五入,保留小数点后m位  select round(1234.5678,2) from dual; 1234.57 dual表示临时调用的表

字符函数

  • length() 查看字符长度 重点

select length(‘ddfda’) from dual; 长度为5

  • lower()将大写转化为小写

select lower(“ADFF”) from dual;

  • upper()将小写转化为大写

select upper(“adfds”) from dual;

  • 字符串拼接 ||

select ‘工号:’ || emp_no ||‘姓名:’||emp_name from t_employee;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mj3MGTKl-1685536971681)(C:\Users\王小瑞\AppData\Roaming\Typora\typora-user-images!请添加图片描述
)]

函数来拼接字段 concat

  • CONCAT( string1, string2 ) 重点

CONCAT()函数在Oracle中可以用于将两个字符串连接在一起

SELECT CONCAT(‘姓名:’,EMP_NAME) FROM T_EMP;

请添加图片描述

—替换

replace(char,str1,str2) 字符串中所有str1换成str2 select replace(‘Scott’,‘s’,‘Boy’) from dual; dual表示临时调用的表

—日期和时间函数

—1、查询Oracle当前的系统时间 sysdate 函数 输出格式的有年 月 日 时 分 秒

select sysdate from dual; 结果为:2023-04-27 20:21:26

—2、将日期转化为字符串 to_char(时间,格式化输出) 重点

select to_char(sysdate,‘yyyy-mm-dd’) from dual; 只输出 2023-04-27

select to_char(sysdate,‘yyyy-mm-dd hh24:Mi:ss’) from dual; 可以输出 年月日 时分秒

—3、将字符串转化为日期 to_data(字符,格式 化输出) 重点

select to_date(’2003-10-17 21:15:37’,’yyyy-mm-dd hh24:mi:ss’) from dual

—案例 查询员工 出生日期中月为9的员工
select * from T_EMPLOYEE
where to_char(BIRTHDAY,‘mm’)=‘09’;

select * from T_EMPLOYEE
where to_char(BIRTHDAY,‘mm’)=9; 这样写也行

多表查询 重点之重

条件创建了两个表

/部门表/

create table t_department
(
dep_id number(38),
dep_no char(5) unique,
dep_name varchar2(100),
constraint PK_DEP_ID primary key(dep_id)
);
comment on table t_department is ‘部门信息表’;
comment on column t_department.dep_id is ‘部门ID(主键)’;
comment on column t_department.dep_no is ‘部门编号’;
comment on column t_department.dep_name is ‘部门姓名’;

/员工表/
create table t_emp
( emp_id number(38),
emp_no char(6) unique not null,
emp_name varchar2(100),
mobile char(11) unique,
email varchar2(100) unique,
sex number(1) check(sex=1 or sex=2),
birthday date,
salary number(6),
dep_id number(38),
homeplace varchar2(100),
constraint PK_EMP_ID1 primary key(emp_id),
constraint FK_DEP_ID1 foreign key(dep_id) references t_department(dep_id)
);
comment on table t_emp is ‘员工信息表’;
comment on column t_emp.emp_id is ‘员工ID(主键)’;
comment on column t_emp.emp_no is ‘员工编号’;
comment on column t_emp.emp_name is ‘员工姓名’;
comment on column t_emp.mobile is ‘手机号码’;
comment on column t_emp.email is ‘邮箱’;
comment on column t_emp.sex is ‘性别’;
comment on column t_emp.birthday is ‘出生日期’;
comment on column t_emp.salary is ‘月薪(RMB)’;
comment on column t_emp.dep_id is ‘所属部门ID’;
comment on column t_emp.homeplace is ‘籍贯’;

补充:笛卡尔积 没必要看

员工表 部门表

员工id 姓名 部门id 部门id 部门名称

1 tom 1 1 财务部

2 Jack 2 2 人事部

笛卡尔乘积

1 tom 1 1 财务部

1 tom 1 · 2 人事部

每条记录分别与另一个表的所有数量分别相乘

检查去除无效的数据

如1:查询员工表,查询显示员工编号,员工姓名,部门名称,部门id

分析:数据分布来自两个表,需要找到 相同的部分进行连接

他们相同的部分是部门id

语句分析:

—多表查询
—1、笛卡儿积 明显数据变多了 但是多的是不存在的 没意义的
SELECT*FROM T_EMP,T_DEPARTMENT; 一下查了两个表

—2、等值连接 (就是它们有相同的字段可以连接)
SELECT*
FROM T_EMP,T_DEPARTMENT
WHERE T_EMP.DEP_ID=T_DEPARTMENT.DEP_ID;

—可以查到数据为39条,每个一一匹配
—给要查询的多表取别名,这样方便计算 也可以不取
SELECT*
FROM T_EMP as e,T_DEPARTMENT as t
WHERE e.DEP_ID=t.DEP_ID;
—查询员工表,查询显示员工编号,员工姓名,部门名称,部门id

分析所需的数据来自两个不同的表,它们之间有相同的部分进行等值连接

SELECT emp_no,
emp_name,
dep_name,
e.dep_id
FROM T_EMP e,T_DEPARTMENT t
WHERE e.DEP_ID=t.DEP_ID;

—3、内连接查询 内连接查询只能查询出匹配的记录,匹配不上的记录时无法查询出来的
—inner join 另一个表 on 等值条件 inner可以省略

on后面表示在哪一个字段进行连接 与上面等值连接结果是一样的 建议用这个
SELECT emp_no,
emp_name,
dep_name,
e.dep_id
FROM T_EMP e
inner join T_DEPARTMENT d
on e.DEP_ID=d.DEP_ID;

—有时候可以它们加上条件 where条件进行限制
WHERE e.sex=1

—左外连接 相比较内连接可以查询 没有匹配条件的 虽然查出来为空
—全连接(表示全部)

语法是语法为full join … on …,全连接的查询结果是左外连接和右外连接查询结果的并集,即使一些记录关联不上,也能够把部分信息查询出来:

产生M+N的结果集,列出两表全部的,不符合条件的,以空值代替。

—假如员工表中 有一个人的部门id为空怎么办
—1、左连接 没有加where条件 左连接就是以左边的表(left join 左边的表)为主表,即使有些记录关联不上,主表的信息也能全部查询出来,也就是左边的表数据全部展示,右边表的数据复合条件的展示,不符合条件的以空值代替

—left join 另一个表 on

SELECT emp_no,
emp_name,
dep_name,
e.dep_id
FROM T_EMP e
left (outer可加可不加 建议不加记那么多干啥) join T_DEPARTMENT d
on e.DEP_ID=d.DEP_ID;

子查询(嵌套查询) 重点

子查询的嵌套可以放在 where 或者from 后面

如:

select * from
(select * from t_emp where sex=1) e1
where e1.homeplace=‘南京’;

—子查询案例1:查询月薪最低的员工信息,显示姓名、月薪

select emp_name,
salary
from t_emp
where salary=(select min(salary) from t_emp);

–子查询案例2:查询月薪最低的员工信息,显示姓名、月薪、部门名称**

select emp_name,
salary,
dep_name
from t_department d
inner join
(select emp_name,
salary,
dep_id
from t_emp
where salary=(select min(salary) from t_emp)) t
on d.dep_id=t.dep_id

–子查询案例3:查询各部门月薪最低的员工信息,显示姓名、月薪、部门名称 必考题 考试会出一个子查询的
select emp_name,
min_salary,
dep_name
from t_emp e
inner join
(select d.dep_id,
min_salary,
dep_name
from t_department d
inner join
(select min(salary) as min_salary,
dep_id
from t_emp
group by dep_id) t
on d.dep_id=t.dep_id ) t1
on e.dep_id=t1.dep_id
where e.salary =t1.min_salary

集合运算

union 将两条sql语句查询的结果集合并,去掉重复的行

如:

select * from t_emp
union
select * from t_emp where sex=1

union all 将两个sql查询的结果合并,不去重

如:

select * from t_emp
union all
select * from t_emp where sex=1

–交集、差集
select * from t_emp
intersect
select * from t_emp where sex=1
–结果集相减
select * from t_emp
minus
select * from t_emp where sex=1

视图

有时候sql语句太长了,为了解决这个方法,引入了视图

创建视图赋予它权限 grant create view 要赋给的对象

  • 什么是视图
    通过创建表的视图可以显示数据的逻辑子集或组合。视图是一种基
    于表或其它视图的逻辑表。视图没有自己的数据,但它如同一个窗
    口,通过它可以查看或更改表中的数据。视图所基于的表被称为基

视图语法:

create [or replace] [force|noforce] view 视图名

as 后面是正常的sql语句

  • OR REPLACE 如果该视图已存在则重新创建
  • FORCE 不管基表是否存在都创建视图
  • NOFORCE 仅当基表存在时才创建视图(默认设置)

如:

create view st

as select * from student;

删除视图

drop view 视图名;

优点:

1、简化复杂sql语句调用

2、提高了数据库安全性

要点:

1、视图是虚拟表,视图中没有任何数据。

2、如果视图的sql语句是单表查询,可以执行DML操作,多表查询,则不可以

序列

建表:

create table vip_table(
id number(10) primary key,
name varchar(20),
sex number(1)

);

序列:为了解决自己插入数据,有时候输入重复的数据,与你定义的主键冲突,因为主键要求值唯一。

create sequence seq_name

increment by 1 每次增1

start with 1 从1开始

nomaxvalue 表示没有最大值

nominvalue 表示没有最小值

nocycle 表示没有循环

nocache 表示没有缓存

这些都是可选项

如:

create sequence seq_name
increment by 1
start with 1
nomaxvalue
nominvalue
nocycle
nocache
;

nextval 会返回下一个可用的序列值

currval 会获得当前序列值

只有对序列发出nextval之后,currval才能包含值

SELECT seq_name.nextval from dual; 表示查看序列值

SELECT seq_name.currval from dual; 表示查看当前序列值

删除序列

drop sequence seq_name;

创建同义词

通过创建同义词(对象的另一个名称)可以简化对象的访问

  • 更方便地引用其他用户拥护的表
  • 缩短冗长的对象名

如:

create synonym

dep(dep表的别名) for

t_department(t_department是你一开始创建的表名); 就是相当于取别名 就是yai

有时候会发觉没有创建同义词的权限你要用grant给它赋权 grant create synonym to 要给的对象;

删除表的同义词

drop synonym dep;

索引

为了更好给数据分类,或者更好的查找数据,速度会更快

语法

create index 索引名 on 表名(字段1,字段2);

删除索引

drop index 索引名;

索引的不足

  • 创建和维护索引,比较耗费时间,随着数据量的增大而增大

  • 创建索引,占一定的物理空间

  • 在对表进行增删改的时候,索引相应的也需要进行动态的更新

表空间

able(
id number(10) primary key,
name varchar(20),
sex number(1)

);

序列:为了解决自己插入数据,有时候输入重复的数据,与你定义的主键冲突,因为主键要求值唯一。

create sequence seq_name

increment by 1 每次增1

start with 1 从1开始

nomaxvalue 表示没有最大值

nominvalue 表示没有最小值

nocycle 表示没有循环

nocache 表示没有缓存

这些都是可选项

如:

create sequence seq_name
increment by 1
start with 1
nomaxvalue
nominvalue
nocycle
nocache
;

nextval 会返回下一个可用的序列值

currval 会获得当前序列值

只有对序列发出nextval之后,currval才能包含值

SELECT seq_name.nextval from dual; 表示查看序列值

SELECT seq_name.currval from dual; 表示查看当前序列值

删除序列

drop sequence seq_name;

创建同义词

通过创建同义词(对象的另一个名称)可以简化对象的访问

  • 更方便地引用其他用户拥护的表
  • 缩短冗长的对象名

如:

create synonym

dep(dep表的别名) for

t_department(t_department是你一开始创建的表名); 就是相当于取别名 就是yai

有时候会发觉没有创建同义词的权限你要用grant给它赋权 grant create synonym to 要给的对象;

删除表的同义词

drop synonym dep;

索引

为了更好给数据分类,或者更好的查找数据,速度会更快

语法

create index 索引名 on 表名(字段1,字段2);

删除索引

drop index 索引名;

索引的不足

  • 创建和维护索引,比较耗费时间,随着数据量的增大而增大

  • 创建索引,占一定的物理空间

  • 在对表进行增删改的时候,索引相应的也需要进行动态的更新

表空间

oracle 数据库被划分成称作为表空间的逻辑区域。一个 oracle 数据库能够有一个或多表空间,而一个表空间则对应着或 多个物理的数据库文件。表空间是 oracle 数据库恢复的最小单位, 容纳着许多数据库实体,如表、视图索引聚簇回退段和临时等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值