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 要查的字段 from 表名;
如:select name,sex from studnet; 表示查出姓名学号两列数据
如: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 数据库恢复的最小单位, 容纳着许多数据库实体,如表、视图索引聚簇回退段和临时等