数据库学习(Oracle)

14 篇文章 0 订阅

目录

1.DB数据类

1.1字符类型  (CHAR,NCHAR,VARCHAR2,VARCHAR,NVARCHAR2)

 1.2数值类型  (NUMBER,FLOAT,INTEGER,BINARY_FLOAT,BINARY_DOUBLE)

1.3.日期类型

1.4.LOB类型 (Large Object)

2.DDL

2.1.表空间

2.1.1 扩展表空间大小

2.1.2.创建表空间,可以无限扩容

2.2.触发器

2.3.索引

2.4.Synonym 同义词

2.5.创建主键

2.6.【ADD CONSTRAINT 约束名 PRIMARY KEY (列名);】 CONSTRAINT 约束名 可不可以省略

2.7.truncate table 是什么意思

2.8.什么是唯一索引, 如何建立唯一索引

2.9.select ,having ,group by 的执行顺序

2.10.XXX

2.11.XXX

2.12.XXX

3.DML

  3.1.MERGE

  3.2.JOIN

 3.3Join的分类

1、内联接

2、外联接

3、交叉联接

3.4. Hierarchical Query(了解树形结构查询)

  3.5.Sort (了解ORDER语法。ROWID的用法)

4.事物

4.1.事物开启,提交,设定回归点。

4.2.锁



1.DB数据类

1.1字符类型  (CHAR,NCHAR,VARCHAR2,VARCHAR,NVARCHAR2)

char,varchar,varchar2,nchar……区别_To Begin,Begin  -CSDN博客

 1.2数值类型  (NUMBER,FLOAT,INTEGER,BINARY_FLOAT,BINARY_DOUBLE)

ORACLE数值类型详解--NUMBER、BINARY_FLOAT、BINARY_DOUBLE、BINARY_INTEGER、FLOAT_haiross的专栏-CSDN博客

---

---

 ---

1.3.日期类型

・DATE,
・TIMESTAMP,
・TIMESTAMP WITH TIME ZONE,
・TIMESTAMP WITH LOCAL TIME ZONE,
・INTERVAL YEAR TO MONTH,
・INTERVAL DAY TO SECOND



ORACLE日期数据类型_gaosaixing的博客-CSDN博客_oracle 日期类型

1.4.LOB类型 (Large Object)

ORACLE (BLOB、CLOB、NCLOB、BFILE)_weixin_30820077的博客-CSDN博客

----

2.DDL

2.1.表空间

---

oarcle数据库真正存放数据的是数据文件(data files),Oarcle表空间(tablespaces)实际上是一个逻辑的概念,他在物理上是并不存在的,那么把一组data files 捻在一起就成为一个表空间。

---

 ---

---

创建表时,指定表空间

 ---

2.1.1 扩展表空间大小

Meathod1:给表空间增加数据文件

ALTER TABLESPACE app_data ADD DATAFILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF' SIZE 50M;

Meathod2:新增数据文件,并且允许数据文件自动增长

ALTER TABLESPACE app_data ADD DATAFILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP04.DBF' SIZE 50M
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;


Meathod3:允许已存在的数据文件自动增长

ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF'
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;

手工改变已存在数据文件的大小 (使用【RESIZE】关键字)

ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP02.DBF'
RESIZE 100M;

2.1.2.创建表空间,可以无限扩容

create tablespace SIRM2
datafile 'D:\oracle\product\10.2.0\oradata\orcl\SIRM2.dbf' size 1024M --存储地址 初始大小1G
autoextend on next 10M maxsize unlimited   --每次扩展10M,无限制扩展

2.2.触发器

创建触发器

---

CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER }
{INSERT | DELETE | UPDATE [OF column [, column …]]}
[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]
ON [schema.]table_name | [schema.]view_name 
[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]
[FOR EACH ROW ]
[WHEN condition]
PL/SQL_BLOCK | CALL procedure_name;

----

---

2.3.索引

Oracle存储索引的数据结构是B*树

Oracle索引(Index)介绍使用 - 十月围城小童鞋 - 博客园 (cnblogs.com)

B树索引是一个典型的树结构,其包含的组件主要是:

      1) 叶子节点(Leaf node):包含条目直接指向表里的数据行。

      2) 分支节点(Branch node):包含的条目指向索引里其他的分支节点或者是叶子节点。

      3) 根节点(Root node):一个B树索引只有一个根节点,它实际就是位于树的最顶端的分支节点。

----

---

​​​​​​Oracle-index索引解读_小工匠-CSDN博客

---

---

 

---

2.4.Synonym 同义词

– 其实就是一个别名

– 创建同义词
create synonym stu for tb_stu;
select * from tb_stu;
select * from stu;

==

2.5.创建主键

  1. 主键约束(Primary Key Constraint):使用PRIMARY KEY关键字来定义表的主键约束。主键约束可以在创建表时添加到列上,或者可以作为ALTER TABLE语句的一部分来添加。

示例DDL语句:

CREATE TABLE 表名 (
    列名 数据类型 PRIMARY KEY,
    ...
);
  1. CREATE TABLE时添加主键:可以通过在创建表时将PRIMARY KEY关键字添加到列定义之后来指定主键。

示例DDL语句:

CREATE TABLE 表名 (
    列名1 数据类型,
    列名2 数据类型,
    ...
    PRIMARY KEY (列名1, 列名2, ...)
);
  1. ALTER TABLE添加主键:可以通过ALTER TABLE语句将主键约束添加到已存在的表中。

示例DDL语句:

ALTER TABLE 表名
ADD CONSTRAINT 约束名 PRIMARY KEY (列名);

请注意,主键约束必须是唯一且非空的,一个表只能有一个主键。

2.6.【ADD CONSTRAINT 约束名 PRIMARY KEY (列名);】 CONSTRAINT 约束名 可不可以省略

在创建主键约束时,可以省略约束名,如下所示:

ALTER TABLE 表名
ADD PRIMARY KEY (列名);

如果省略约束名,数据库系统将自动生成一个随机的约束名。但是,建议为约束指定一个有意义的名字,以便于后续的管理和维护。

xx

2.7.truncate table 是什么意思

TRUNCATE TABLE 是一种 SQL 命令,用于快速删除表中的所有数据,同时保留表的结构。

执行 TRUNCATE TABLE 后,表内的所有行都将被删除,但表结构、索引、约束等信息仍然保留。相较于 DELETE 命令,TRUNCATE TABLE 更快,因为它是直接删除表中的数据页,而不是逐行删除。

语法如下:

TRUNCATE TABLE 表名;

需要注意的是,执行 TRUNCATE TABLE 时无法恢复被删除的数据,因此在执行之前请确保数据备份或确定无需保留该表中的数据。此外,TRUNCATE TABLE 命令通常需要相应的权限才能执行。

xx

2.8.什么是唯一索引, 如何建立唯一索引

唯一索引是一种数据库索引,它的作用是确保在索引列中的值是唯一的,即每个索引键只能对应一个数据行。

唯一索引可以用于加快数据的查询速度,同时还可以起到数据完整性和约束的作用。当尝试向唯一索引列插入重复值时,数据库将会阻止此操作,并抛出错误。

在大多数数据库系统中,可以通过以下方式来创建唯一索引:

CREATE UNIQUE INDEX 索引名 ON 表名 (列名);

其中,索引名 是索引的名称,表名 是要创建索引的表名,列名 是要创建索引的列名。

例如,要为名为 users 的表的 username 列创建唯一索引,可以执行以下命令:

CREATE UNIQUE INDEX idx_username ON users (username);

需要注意的是,唯一索引要求索引列的值是唯一的,因此在创建唯一索引之前,应该确保索引列中的数据是唯一的。否则,创建唯一索引时将会失败。

xx

2.9.select ,having ,group by 的执行顺序

SELECT语句的执行顺序通常如下:

  1. FROM子句:指定要查询的表或视图。
  2. WHERE子句:筛选满足条件的行。
  3. GROUP BY子句:按指定的列对结果进行分组。
  4. HAVING子句:筛选满足条件的分组。
  5. SELECT子句:选择要显示的列或计算的表达式。
  6. ORDER BY子句:按指定的列进行排序。
  7. LIMIT/OFFSET子句:限制结果集的大小。

需要注意的是,有些数据库系统在执行顺序上可能会有细微的差异,但一般遵循以上的基本执行顺序。在执行SELECT查询时,GROUP BY子句和HAVING子句是结合使用的,用于对分组后的结果进行条件过滤。

具体来说,HAVING子句是在GROUP BY子句之后执行的,它对按分组进行聚合的结果进行筛选。在执行过程中,首先根据GROUP BY子句中指定的列进行分组,然后根据HAVING子句中的条件筛选出符合条件的分组。最后,根据SELECT子句中的列或表达式,生成最终的查询结果集。

以下是一个示例查询,展示了SELECT语句中HAVING和GROUP BY的执行顺序:

 
 

SELECT column1, SUM(column2) FROM table WHERE condition GROUP BY column1 HAVING condition

在这个例子中,首先根据WHERE子句的条件进行筛选,然后按照GROUP BY子句中的列进行分组。接着,在分组的基础上,使用HAVING子句的条件进行过滤。最后,根据SELECT子句中指定的列或表达式,生成最终的结果集。

xx

2.10.XXX

xx

2.11.XXX

xx

2.12.XXX

xx

===

3.DML

  3.1.MERGE

​​​​​​Oracle数据库MERGE语句_周末未至-CSDN博客

---

MERGE INTO 表名
USING 表名/视图/子查询 ON 连接条件
-- 当匹配得上连接条件时
WHEN MATCHED THEN 
更新、删除操作
-- 当匹配不上连接条件时
WHEN NOT MATCHED THEN 
更新、删除、插入操作

---

例子:

-- 60号部门员工奖金表
CREATE TABLE dept60_bonuses
(
   employee_id NUMBER,
   bonus_amt NUMBER
);
 
INSERT INTO dept60_bonuses
VALUES
(103, 0);
INSERT INTO dept60_bonuses
VALUES
(104, 100);
INSERT INTO dept60_bonuses
VALUES
(105, 0);
 
-- 提交事务
COMMIT;
 
SELECT employee_id, last_name, salary
FROM hr.employees
WHERE department_id = 60;

---

MERGE INTO dept60_bonuses b

在这里定义了表,后面的 UPDATE ,Insert 操作中,就不用写表名了。

MERGE INTO dept60_bonuses b
USING (
           SELECT employee_id, salary, department_id
           FROM hr.employees
           WHERE department_id = 60
      ) e
ON (b.employee_id = e.employee_id)
-- 当符合关联条件时
WHEN MATCHED THEN
     -- 将奖金为0的员工的奖金调整为其工资的20%
     UPDATE 
     SET b.bonus_amt = e.salary * 0.2
     WHERE b.bonus_amt = 0
     -- 删除工资大于7500的员工奖金记录
     DELETE 
     WHERE (e.salary > 7500)
-- 当不符合连接条件时
WHEN NOT MATCHED THEN
     -- 将不在部门为60号的,且不在dept60_bonuses表的用工信息插入,并将其奖金设置为其工资的10%
     INSERT 
     (b.employee_id, b.bonus_amt)
     VALUES 
     (e.employee_id, e.salary * 0.1)
     WHERE (e.salary < 7500)

---

  3.2.JOIN

1. inner join(等值连接) 只返回两个表中联结字段相等的行

2. left join(左联接) 返回包括左表中所有记录和右表中联结字段相等的记录 
3. right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录

17MyCat - 分片join(join 的概述)_阿甘兄-CSDN博客

---

--- 

符号连接 (+)

SELECT a.*, b.* from a(+) = b就是一个右连接,等同于select a.*, b.* from a right join b
SELECT a.*, b.* from a = b(+)就是一个左连接,等同于select a.*, b.* from a left join b

Oracle  外连接
(1)左外连接 (左边的表不加限制)
(2)右外连接(右边的表不加限制)
(3)全外连接(左右两表都不加限制)

 3.3Join的分类

1、内联接


(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。

2、外联接


外联接可以是左向外联接、右向外联接或完整外部联接。
在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:

1)LEFT JOIN或LEFT OUTER JOIN
左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

2)RIGHT JOIN 或 RIGHT OUTER JOIN
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
3)FULL JOIN 或 FULL OUTER JOIN
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

3、交叉联接


交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。

3.4. Hierarchical Query(了解树形结构查询)

hierarchical  [ˌhaɪəˈrɑːkɪkl] 等级制的; 按等级划分的; 等级制度的;

Hierarchical query-层次查询之START WITH CONNECT BY用法 - 新一 - 博客园 (cnblogs.com)

  3.5.Sort (了解ORDER语法。ROWID的用法)

・order by

・rowid

---

​​​​​​ORACLE中的rowid用法 - struggle&小白 - 博客园 (cnblogs.com)

4.事物

4.1.事物开启,提交,设定回归点。

xxx

4.2.锁

・共享锁(SHARE) ,
・共享行排他(SHARE ROW EXCLUSIVE) ,
・排他(EXCLUSIVE),
・行共享 (ROW SHARE),
・行排他(ROW EXCLUSIVE

ーーー

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值