Oracle用户操作、数据类型、表格修改、约束设置详解

简介: Oracle用户操作、数据类型、表格修改、约束设置相关操作以及使用案例

用户和权限

1、用户查询和创建

a) 语法

create user 用户名 identified by 密码;

b) 创建用户 bjsxt, 设定密码为 bjsxt
注意: 操作数据库对象是需要 dba 权限的

create user bjsxt identified by bjsxt;

2、用户授权(grant)

Oracle 中的权限很多, 为了方便用户管理权限, 提供了角色这个概念.
角色代表一个身份, 该身份拥有固定的权限. 常见的角色:
DBA: 数据库管理员
CONNECT: 临时用户, 拥有少量的权限
RESOURCE: 比较靠谱的用户, 拥有更多的权限, 不能管理数据库

a) 给 bjsxt 用户授予普通用户的权限

grant connect, resource to bjsxt; 

b) 从 bjsxt 用户撤销 resource 权限

revoke resource from bjsxt; 

3.、删除用户 (drop)

drop user bjsxt;


4.、修改用户 (revoke)

### 修改用户密码

alter user bjsxt identified by 123; 

锁定用户和解锁定用户

a) 锁定用户

alter user bjsxt account lock; 

c) 解锁用户

alter user bjsxt account unlock;

Oracle 中的数据类型

1、字符类型

a) varchar2
可变长度的字符串, 效率较低 ,注意不是varchar
b) char
不可变长度的字符串, 效率较高

2、数值类型

number, 既可以表示整数, 也可以表示浮点数

3、日期时间类型

a) date, 存放日期和时间
b) timestamp, 比 date 更精确的日期时间类型

4、lob 类型

a) blob, 用于存放二进制数据, 可以用于存放文件, 图片, 音频, 视频等二进制数据.
b) clob, 用于存放大文本信息.

创建表格

创建学生表, 字段包含学号、姓名、性别,年龄、入学日期、班级,email 等信息

create table student (        
sno number(4),        
sname varchar2(12),        
gender char(3),        
age number(3),        
sdate date,        
clazz varchar2(20),        
email varchar2(50) );

修改表格 (alter)

1、添加字段

alter table student add (score number(3)); 

2、修改字段的类型

alter table student modify (score number(5,2)); //显示五位有效数字,其中有两位小数

3、重命名字段

alter table student rename column score to fenshu; 

4、删除字段

alter table student drop column fenshu; 

重命名表格 (rename)

rename student to stu; 

删除表格 (drop)

drop table stu;

表格的约束

constraints, 约束, 用于对表格的数据进行限制, 保证表格数据的完整性和一致性.
语法:
constraints 约束名 约束类型 (约束字段)

1. 主键约束(primary key)

主键是用于唯一标识一条记录的字段, 必须保证既非空又唯一.
一张表中, 只能有一个主键.
Constraints: 约束

a) 在表级别定义主键约束, 对约束统一管理

create table student (        
sno number(4),        
sname varchar2(12),        
gender char(3),        
age number(3),        
sdate date,        
clazz varchar2(20),        
email varchar2(50),        
constraints pk_student primary key (sno) );

b) 表级别简化版定义主键约束, 省略约束名
create table student (

sno number(4),        
sname varchar2(12),        
gender char(3),        
age number(3),        
sdate date, 
clazz varchar2(20),        
email varchar2(50),        
primary key (sno) ); 

c) 在列级别定义主键约束

create table student (        
sno number(4) constraints pk_student primary key,        
sname varchar2(12),        
gender char(3),        
age number(3),        
sdate date,        
clazz varchar2(20),        
email varchar2(50) ); 

d) 在列级别简化版定义主键约束

create table student (        
sno number(4) primary key,        
sname varchar2(12),        
gender char(3),        
age number(3),        
sdate date,        
clazz varchar2(20),        
email varchar2(50) );

e) 联合主键, 只能在表级别定义, 因为一个表只能有一个主键

create table student (       
sno number(4),        
sname varchar2(12),        
gender char(3),        
age number(3),        
sdate date,        
clazz varchar2(20),        
email varchar2(50),        
constraints pk_student primary key (sno, email) );

2. 非空约束(not null)

字段值不允许为空, 非空约束只能在列级别定义

create table student (        
sno number(4),        
sname varchar2(12) not null,        
gender char(3),        
age number(3),        
sdate date,        
clazz varchar2(20),        
email varchar2(50),        
constraints pk_student primary key (sno) );

3. 唯一约束(unique)

要求字段值不能重复.
写在字段后的是列级约束,写在最后的是表级约束

create table student (        
sno number(4),        
sname varchar2(12) not null,        
gender char(3),        
age number(3),        
sdate date,        
clazz varchar2(20),        
email varchar2(50), -- unique,        
constraints pk_student primary key (sno),        
constraints uk_student_email unique (email));


4. 检查约束(check)

用于限定字段值的取值范围
create table student (
sno number(4),
sname varchar2(12) not null,
gender char(3) check (gender in ('男', '女')),
age number(3),
sdate date,
clazz varchar2(20),
email varchar2(50),
constraints pk_student primary key (sno),
constraints uk_student_email unique (email),
constraints ck_student_age check (age between 18 and 30) );

5. 外键约束(foreign key)

用于约束表和表之间的关系. 两张表的依赖关系. 以 emp 表和 dept 表为例, emp 表依赖 dept 表. 因此, dept 表可以被称之为主表, emp 表被称之为从表.
注意:
主表中, 只有主键或者唯一键才可以被从表参考.
从表中作为外键的列, 类型一定要和主表的被参考列相同.

a) 建立主表 clazz

create table clazz (        
cno number(3) primary key,        
cname varchar2(20) not null,        
croom number(3) ); 

b) 创建从表, 并定义外键 student

create table student (        
sno number(4),        
sname varchar2(12) not null,        
gender char(3) default '男' check (gender in ('男', '女')),        
age number(3),        
sdate date,        
email varchar2(50),        
cno number(3),        
constraints pk_student primary key (sno),        
constraints uk_student_email unique (email),        
constraints ck_student_age check (age between 18 and 30),        
constraints fk_student_cno foreign key (cno) references clazz (cno) ); 

c) 也可以在列级别定义外键, 如下:

create table student (        
sno number(4),        
sname varchar2(12) not null,        
gender char(3) default '男' check (gender in ('男', '女')),        
age number(3),        
sdate date,        
email varchar2(50),        
cno number(3)  references clazz(cno), --外键的简写       
constraints pk_student primary key (sno),        
constraints uk_student_email unique (email),        
constraints ck_student_age check (age between 18 and 30) );




6. 外键中的删除问题:

主表中的数据在被引用时, 无法直接删除, 默认情况下, 需要先删除从表中对应的所有数据, 再删除主表中的数据.
可以在定义外键时, 设置删除策略为 cascade(级联), 表示当删除主表的信息时, 同时删除从表中所有关联的信息
create table student (        
sno number(4),        
sname varchar2(12) not null,        
gender char(3) default '男' check (gender in ('男', '女')),        
age number(3),        
sdate date,        
email varchar2(50),        
cno number(3),        
constraints pk_student primary key (sno),        
constraints uk_student_email unique (email),        
constraints ck_student_age check (age between 18 and 30),        
constraints fk_student_cno foreign key (cno) references clazz (cno) on delete cascade ); 
可以在定义外键时, 设置删除策略为 set null(设空), 表示当删除主表的信息时, 将从表中的相关数据设置为 null
create table student (        
sno number(4),        
sname varchar2(12) not null,        
gender char(3) default '男' check (gender in ('男', '女')),        
age number(3),        
sdate date,       
email varchar2(50),        
cno number(3),        
constraints pk_student primary key (sno),        
constraints uk_student_email unique (email),        
constraints ck_student_age check (age between 18 and 30),        
constraints fk_student_cno foreign key (cno) references clazz (cno) on delete set null ); 

在修改表格时添加约束

a) 创建主表 clazz

create table clazz (        
cno number(3) primary key,        
cname varchar2(20) not null,        
croom number(3) ); 

b) 创建从表 student

create table student (        
sno number(4),        
sname varchar2(12) not null,        
gender char(3) default '男',        
age number(3),        
sdate date,        
email varchar2(50),        
cno number(3) ); 

c) 给 student 表添加约束(alter table xxx add constraints)
-- 主键约束

alter table student add constraints pk_student primary key (sno); 

-- 唯一约束

alter table student add constraints uk_student_email unique (email); 

-- 检查约束

alter table student add constraints ck_student_age check (age between 18 and 30); 
alter table student add constraints ck_student_gender check (gender in ('男','女'));

-- 外键约束

alter table student add constraints fk_student_cno foreign key (cno) references clazz (cno);


相关文章
|
7月前
|
Oracle 关系型数据库 Java
实时计算 Flink版操作报错之读取Oracle数据库时遇到找不到驱动,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
实时计算 Flink版操作报错之读取Oracle数据库时遇到找不到驱动,是什么原因
|
18天前
|
监控 Oracle 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第8天】在 Linux 平台设置 Oracle 开机自启动有多种方法,本文以 CentOS 为例,介绍了两种常见方法:使用 `rc.local` 文件(较简单但不推荐用于生产环境)和使用 `systemd` 服务(推荐)。具体步骤包括编写启动脚本、赋予执行权限、配置 `rc.local` 或创建 `systemd` 服务单元文件,并设置开机自启动。通过 `systemd` 方式可以更好地与系统启动过程集成,更规范和可靠。
|
19天前
|
Oracle Ubuntu 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第7天】本文介绍了 Linux 系统中服务管理机制,并详细说明了如何在使用 systemd 和 System V 的系统上设置 Oracle 数据库的开机自启动。包括创建服务单元文件、编辑启动脚本、设置开机自启动和启动服务的具体步骤。最后建议重启系统验证设置是否成功。
|
26天前
|
存储 SQL Oracle
[Oracle]面试官:你简单说说常用的4种约束
本文介绍了数据库表中的几种常见约束,包括主键、唯一键、外键、检查和非空约束。详细说明了每种约束的创建、删除及启用/禁用方法,特别强调了外键约束的级联操作和检查约束的正则表达式应用。建议多练习手写SQL命令以加深理解。
33 2
|
7月前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版操作报错之遇到报错 Oracle 19C,如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
7月前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版操作报错合集之采集oracle的时候报ORA-65040:不允许从可插入数据库内部执行该操作如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
267 3
|
5月前
|
Oracle 关系型数据库 数据库
|
5月前
|
SQL Oracle 关系型数据库
关系型数据库Oracle设置 RMAN 环境:
【7月更文挑战第25天】
72 2
|
5月前
|
Oracle 关系型数据库 Unix
关系型数据库Oracle设置环境变量:
【7月更文挑战第22天】
574 4
|
5月前
|
分布式计算 Oracle 大数据
MaxCompute产品使用合集之没有数据源,只是将批量状态和时间写入Oracle表里,该如何操作
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。

推荐镜像

更多