Oracle的DCL、DDL、DML语言学习使用
- 前言
- 1.SQL Plus
- 1.1 命令行SQL PLUS使用
- sqlplus /nolog
- sqlplus / as sysdba
- 1.2 oracle自带SQL PLUS使用
- 1.3 sys和system用户的区别
- 2. Oracle的体系结构
- 3.DCL语言
- 什么是DCL语言
- 3.1 查看数据文件位置和表空间
- 3.2 创建表空间
- 3.3 删除表空间
- 3.4 创建表空间用户
- 3.5 用户权限分类
- 3.6 给用户赋权
- 3.7 取消用户赋权
- 3.8 修改用户密码
- 4. DDL语言
- 什么是DDL语言
- 4.1 数据类型
- 4.2 创建表
- 4.3 修改表
- 4.4 删除表
- 4.5 创建视图
- 4.6 表约束
- 4.6.1 主键约束(Primary Key Constraint)
- 4.6.2 唯一约束(Unique Constraint)
- 4.6.3 外键约束(Foreign Key Constraint)
- 4.6.4 检查约束(Check Constraint)
- 4.6.5 非空约束(Not Null Constraint)
- 4.6.6 Oracle表包含常用约束的示例
- 5.DML语言
- 5.1 插入数据
- 5.2 更新数据
- 5.3 删除数据
- 5.4 查询数据
前言
本文基于oracle19c版本对于oracle的学习使用进行记录,当前使用oracle是安装在windows10上用于个人学习使用。如果需要安装可参考:
Windows10环境下载安装Oracle19c教程
1.SQL Plus
本文基于SQL Plus用于语句的执行和演示
SQL Plus是Oracle数据库附带
的一种交互式命令行工具,允许用户与Oracle数据库进行交互式通信,并执行SQL语句和PL/SQL代码
。它是Oracle数据库的标准工具之一,它提供了一个用户友好的界面,使用者可以登录、查询数据库对象(如表、视图、索引等)、执行数据定义语言(DDL)、数据操作语言(DML)和数据控制语言(DCL)语句和存储过程、解释计划等
。
1.1 命令行SQL PLUS使用
sqlplus /nolog
CMD命令行输入sqlplus /nolog
命令是启动sqlplus但是不进行连接数据库
的操作,一般用于安装数据库后验证安装是否成功
sqlplus / as sysdba
CMD命令行输入sqlplus / as sysdba
是一种简化写法,其实是省略了用户名和密码,完整的写法:
sqlplus sys/password as sysdba
1.2 oracle自带SQL PLUS使用
开始->oracle目录->SQL Plus,双击运行
1.3 sys和system用户的区别
以下操作使用system用户进行
system:用户具有DBA权限,但是没有SYSDBA权限,用户只能用normal
身份登陆。system是数据库内置的一个普通管理员,手工创建的任何用户在被授予dba角色后都跟这个用户差不多。
sys:用户具有“SYSDBA”或者“SYSOPER”权限,登陆也只能用这两个身份,不能用normal。SYS用户具有DBA权限,并具有SYS模式。只能通过SYSDBA登录数据库,是Oracle数据库中权限最高
的帐号
2. Oracle的体系结构
在Oracle数据库中,存在以下层次关系:实例(Instance) > 用户(User) > 表空间(Tablespace) > 表(Table)。
-
实例(Instance):
实例是Oracle数据库运行时的一个独立环境。它包括了数据库内存结构和后台进程
,负责管理数据库的访问和操作。一个物理服务器上可以同时运行多个
Oracle实例,每个实例都有自己的系统资源和配置。 -
用户(User):
用户是数据库中的逻辑概念,用于识别和控制对数据库的访问和操作
。每个用户都有自己的用户名和密码,并且被授予特定的权限和角色。用户可以创建表、视图、索引等数据库对象,并可以执行各种SQL操作。 -
表空间(Tablespace):
表空间是逻辑存储单元
,用于组织和管理数据库中的表、索引和其他对象。一个数据库可以包含多个表空间,每个表空间由一个或多个数据文件组成
,这些文件存储了实际的数据和索引。 -
表(Table):
表是数据库中的基本存储结构
,用于存储数据。表由一个或多个列组成,每列定义了特定的数据类型。表包含行(记录),每行代表一个数据实体。用户可以在自己的模式中创建表,并使用SQL语句对表进行插入、更新、删除和查询操作。
总结:
Oracle数据库中,实例是运行数据库的环境,用户是数据库的访问和操作者,表空间是逻辑存储单元,用于管理数据库对象的存储,而表是存储数据的基本单位。用户可以在自己的模式中创建表,并使用分配给他们的表空间来存储数据。
3.DCL语言
什么是DCL语言
DCL(Data Control Language)语言是一种用于管理数据库访问权限
的语言。它包括以下三种命令:
-
GRANT:用于给用户或用户组授予访问数据库的权限。
-
REVOKE:用于从用户或用户组中撤销访问数据库的权限。
-
DENY:用于阻止用户或用户组访问数据库。
DCL语言是SQL(Structured Query Language)的一部分,通常与DDL(Data Definition Language)和DML(Data Manipulation Language)一起使用来管理数据库。它可以保护数据库免受未经授权的访问和数据泄露。
以下操作使用system用户进行
3.1 查看数据文件位置和表空间
语法:
# 查询数据文件位置
select name from v$datafile;
# 查看表空间
select TABLESPACE_NAME from dba_tablespaces;
3.2 创建表空间
语法:
create tablespace 表空间的名称
datafile '文件的路径'
size 初始化大小
autoextend on
next 每次扩展的大小;
示例:
表空间名称为zqtestts
,文件路径: ‘E:\PERSONAL\ORACLE\ORADATA\ORCL\zqtestts.DBF’,初始大小为1024m
(1GB),自动扩展大小100m
create tablespace zqtestts
datafile 'E:\PERSONAL\ORACLE\ORADATA\ORCL\zqtestts.DBF'
size 1024m
autoextend on
next 100m;
3.3 删除表空间
语法:
drop tablespace 表空间名称;
示例:
drop tablespace zqtestts;
3.4 创建表空间用户
语法:
create user 用户名 identified by 密码 default tablespace 表空间名;
示例:
create user zhouquan identified by 123456 default tablespace zqts;
3.5 用户权限分类
系统权限分类:(系统权限只能由DBA用户授出)
- DBA:拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
- RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
- CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
实体权限分类:
select、update、insert、alter、index、delete、all
3.6 给用户赋权
语法:
grant 系统权限列表 to 用户名;
grant 实体权限列表 on 表名称 to 用户名;
示例:
grant DBA,RESOURCE,CONNECT to zhouquan;
grant all on Student to zhouquan;
3.7 取消用户赋权
语法:
revoke 系统权限列表 from 用户名;
revoke 实体权限列表 on 表名称 from 用户名;
示例:
revoke connect from zhouquan;
revoke insert on Student from zhouquan;
3.8 修改用户密码
语法:
alter user 用户名 identified by "密码";
示例:
alter user zhouquan identified by "zhouquan123";
4. DDL语言
什么是DDL语言
DDL(Data Definition Language,数据定义语言)是Oracle数据库管理系统中的一种命令语言,它用于创建、修改和删除数据库中的各种对象,如表、索引、视图、触发器等。
DDL语言操作的对象包括数据库、表空间、表、列、索引、视图、序列、触发器、存储过程、函数等,DDL语言方式包括CREATE、ALTER和DROP三种。
CREATE是创建语句、ALTER是修改语句、DROP是删除语句。
4.1 数据类型
Oracle数据库中的DDL语言支持多种数据类型,以下是一些常用的数据类型示例:
- 字符型数据类型:
- CHAR(size): 定长字符串,最多可以存储2000字节。
- VARCHAR2(size): 可变长度字符串,它不会用空格填充来达到其最大长度,最多可以存储4000字节的信息
- VARCHAR(size): 可变长度字符串,最大长度为size。
- NCHAR(size): 定长Unicode字符串,,最多可以存储2000字节。
- NVARCHAR2(size): 可变长度Unicode字符串,最多可以存储4000字节的信息
- CLOB: 大字符对象,用于存储大量字符数据,最大长度4G。
- NCLOB 根据字符集而定的字符数据 最大长度4G
- 数值型数据类型:
- NUMBER(precision, scale): 数字类型,可以指定总位数和小数位数。
precision:是有效数据总位数,取值范围为【1-38】,默认值是38
scale:表示精确到多少位,取值范围为【-84-127】,默认值是0 - INTEGER: 整数类型。
- FLOAT(precision): 浮点数类型,可以指定精度,范围可以从1到126
- BINARY_FLOAT: 单精度浮点数类型。
- BINARY_DOUBLE: 双精度浮点数类型。
- 日期与时间型数据类型:
- DATE: 日期类型,包含日期和时间。
- TIMESTAMP: 包含日期和时间的时间戳类型。
- INTERVAL YEAR TO MONTH: 表示年份和月份的间隔类型。
- INTERVAL DAY TO SECOND: 表示天数、小时、分钟和秒的间隔类型。
- 布尔型数据类型:
- BOOLEAN: 用于存储逻辑值,可以为TRUE、FALSE或NULL。
- 二进制型数据类型:
- RAW(size): 定长二进制数据。raw是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
- BLOB: 大二进制对象,用于存储大量二进制数据,最大长度4G。
- 其他数据类型:
- ROWID: 行标识符,用于唯一标识表中的行。
- UROWID: Unicode版本的ROWID。
- XMLTYPE: 用于存储XML数据。
这些只是一些常用的Oracle数据类型示例,还有其他更多的数据类型和选项可供选择和使用,具体的数据类型选择取决于应用程序的需求和数据的特性。
4.2 创建表
语法:
CREATE TABLE table_name (
列 数据类型 列约束
column1 datatype constraint,
column2 datatype constraint,
...
);
示例:
# 创建书目表,booname:书名,price:价格
CREATE TABLE Book (
id number,
bookname varchar2(50),
price float(2)
);
4.3 修改表
语法:
# 增加列
ALTER TABLE table_name
ADD (column datatype constraint);
# 修改列
ALTER TABLE table_name
MODIFY (column datatype constraint);
# 删除列
ALTER TABLE table_name
DROP COLUMN column_name;
示例:
# 书目表增加作者字段
ALTER TABLE Book
ADD (author varchar2(50));
# 书目表修改作者字段为20
ALTER TABLE Book
MODIFY (author varchar2(20));
# 书目表删除作者字段
# 删除列
ALTER TABLE Book
DROP COLUMN author ;
4.4 删除表
drop table 表名;
delete table 表名;
truncate table 表名;
-
语句类型:
delete是dml语句
truncate和drop是ddl语句
删除速度drop > truncate > delete -
表和索引所占的空间
truncate表后,表和索引的大小恢复到所占空间初始大小。
delete不改变表和索引所占空间的大小。
drop将表和索引所占用的空间全部释放。 -
结构
truncate与不带where条件的delete删除表数据,而不删除表的结构。
drop 语句删除表的结构,包括约束,触发器,索引。
依赖该表的存储过程和函数被保留,但是状态为invalid。 -
truncate与delete
truncate在功能上与不带where子句的delete相同,都是删除表中的全部行。但是truncate更快
,且使用的系统和事务日志资源少。
delete语句每删除一行,并在事务日志中为所删除的每行记录一项。
truncate table通过释放存储表数据所使用的的数据页来删除数据,并且只在事务日志中记录页的释放。
4.5 创建视图
语法:
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
示例:
# 书目表增加作者字段
CREATE VIEW Book_view AS
SELECT id, bookname, price
FROM Book
WHERE price > 10.0;
4.6 表约束
表约束可用于保证数据的完整性和一致性,并提供额外的数据验证和保护。在开发过程中根据实际需求,可以在表的列上定义一个或多个约束。
Oracle中的表约束有以下几种常见类型:
4.6.1 主键约束(Primary Key Constraint)
作用:用于唯一标识表中的每一行,并且确保列或列组合的值不重复。
示例:
CREATE TABLE employees (
employee_id NUMBER PRIMARY KEY,
first_name VARCHAR2(50),
last_name VARCHAR2(50)
);
4.6.2 唯一约束(Unique Constraint)
作用:确保列或列组合的值在表中是唯一的。
示例:
CREATE TABLE products (
product_id NUMBER,
product_name VARCHAR2(100),
CONSTRAINT uk_product_name UNIQUE (product_name)
);
4.6.3 外键约束(Foreign Key Constraint)
作用:用于确保两个表之间的数据完整性,保持引用表和被引用表之间的关系。
示例:
CREATE TABLE orders (
order_id NUMBER,
customer_id NUMBER,
order_date DATE,
CONSTRAINT fk_customer_id FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
4.6.4 检查约束(Check Constraint)
作用:用于限制列中的值必须满足指定的条件。
示例:
CREATE TABLE employees (
employee_id NUMBER,
first_name VARCHAR2(50),
last_name VARCHAR2(50),
salary NUMBER,
CONSTRAINT chk_salary CHECK (salary > 0)
);
4.6.5 非空约束(Not Null Constraint)
作用确保列中的值不为空。
示例:
CREATE TABLE customers (
customer_id NUMBER,
customer_name VARCHAR2(100) NOT NULL
);
4.6.6 Oracle表包含常用约束的示例
下面是一个创建Oracle表并包含常用约束的示例:
CREATE TABLE employees (
employee_id NUMBER(10) PRIMARY KEY,
first_name VARCHAR2(50) NOT NULL,
last_name VARCHAR2(50) NOT NULL,
email VARCHAR2(100) UNIQUE,
hire_date DATE DEFAULT SYSDATE,
salary NUMBER(10, 2) CHECK (salary > 0),
department_id NUMBER(10),
CONSTRAINT fk_department_id FOREIGN KEY (department_id) REFERENCES departments(department_id)
);
在上述示例中,创建了一个名为 “employees” 的表,包含了以下常用约束:
-
主键约束(Primary Key Constraint):
employee_id
列被定义为主键,唯一标识表中的每一行。 -
非空约束(Not Null Constraint):
first_name
和last_name
列被定义为非空,确保这些列中的值不为空。 -
唯一约束(Unique Constraint):
email
列被定义为唯一约束,确保该列中的值在表中是唯一的。 -
默认约束(Default Constraint):
hire_date
列使用DEFAULT SYSDATE
,即在插入数据时如果没有提供hire_date
的值,则默认使用系统当前日期。 -
检查约束(Check Constraint):
salary
列使用CHECK (salary > 0)
约束,确保salary
列中的值大于 0。 -
外键约束(Foreign Key Constraint):
department_id
列被定义为外键约束,参考了departments
表的department_id
列。
5.DML语言
Oracle的DML(Data Manipulation Language,数据操纵语言)是用于在数据库中插入、更新和删除数据的一组语句。DML语言允许用户通过执行相应的命令来操作数据库中的数据。以下是Oracle中常用的DML语句示例:
5.1 插入数据
语法:
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
示例:
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (1, 'John', 'Doe');
5.2 更新数据
语法:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
示例:
UPDATE employees
SET salary = 5000
WHERE employee_id = 1;
5.3 删除数据
语法:
DELETE FROM table_name
WHERE condition;
示例:
DELETE FROM employees
WHERE employee_id = 1;
5.4 查询数据
SELECT column1, column2, ...
FROM table_name
WHERE condition;
示例:
SELECT employee_id,first_name,last_name FROM employees;