《Oracle PL/SQL必知必会》——第1章 了解SQL

简介:

本节书摘来自异步社区出版社《Oracle PL/SQL必知必会》一书中的第1章,第1.1节,作者:【美】Ben Forta(本 福达),更多章节内容可以访问云栖社区“异步社区”公众号查看。

第1章 了解SQL

Oracle PL/SQL必知必会
在本章中,你将学习数据库和SQL的相关知识,它们是学习Oracle和PL/SQL的前提。

1.1 数据库基础

你正在阅读本书的事实表明你需要以某种方式与数据库交互。因此,在深入学习Oracle及其SQL语言的实现(PL/SQL)之前,了解一些关于数据库和数据库技术的基本概念就很重要。

无论知道与否,你事实上一直都在使用数据库。每次从电子邮件或智能手机通讯录中选择一个名字时,就是在使用数据库。当在Internet搜索站点上执行搜索时,也是在使用数据库。当在工作中登录到网络时,将对照数据库验证你的名字和密码。甚至在自动取款机上使用ATM卡时,同样在使用数据库,以进行PIN验证和余额检查。

但是,即使我们一直都在使用数据库,对于数据库到底是什么仍然认识不清。事实的确如此,因为不同的人使用“数据库”一词来指代不同的事物。因此,一个良好的学习起点是:利用一份列表解释最重要的数据库术语。

提示:复习基本概念
 

下面简要概述了一些基本的数据库概念。如果你已经具有一些数据库使用经验,下面的内容将唤醒你的记忆;如果你是新手,那么以下内容将给你提供绝对基础的知识。理解数据库是掌握Oracle的一个重要部分,你可能想要寻找一个关于数据库基本原理的优秀图书,以在需要时复习一下相关的主题。

1.1.1 什么是数据库

人们以多种不同的方式使用数据库(Database)这个术语,但是在我们看来,数据库是指以某种有组织的方式存储的数据集合。理解它的最简单的方式是把数据库想象成一个档案柜。档案柜只是存储数据的物理位置,而不管数据是什么以及它们是怎样组织的。

数据库
 

用于存储有组织的数据的容器(通常是文件或文件集)。
 

警告:滥用导致混淆
 

人们经常使用数据库(database)这个术语来指代他们正在运行的数据库软件。这是不正确的,它是大量混淆之源。数据库软件实际上被称为数据库管理系统(Database Management System,DBMS)。数据库是通过DBMS创建和操作的容器。数据库可能是存储在硬盘驱动器上的文件,但也可能不是。一般而言,这甚至是不重要的,因为你从来不会以任何方式直接访问数据库;你总是使用DBMS,它会为你访问数据库。

1.1.2 表

当在档案柜中存储信息时,不会把信息简单地扔进抽屉里。相反,将在档案柜里创建文件,然后把相关的数据归档在特定的文件中。

在数据库世界里,这个文件称为表(Table)。表是结构化的文件,可以存储特定类型的数据。表可能包含顾客列表、产品目录,或者其他任何信息列表。


 

特定类型数据的结构化列表。
这里的关键是:存储在表中的数据是一种数据类型或者一份列表。你永远不会把顾客列表和订单列表存储在同一个数据库表中。如果这样做,将使往后的检索和访问难以进行。相反,你将创建两个表,每个表用于存储一份列表。

数据库中的每个表都具有一个用于标识它的名称,这个名称总是唯一的,意味着该数据库中没有其他的表可以具有相同的名称。

注意:表名称
 

使表名称成为唯一的实际上是几个内容的组合,包括数据库名称和表名称。这意味着尽管不能在相同的数据库中多次使用相同的表名称,但是肯定可以在不同的数据库中重用表名称。
表具有一些特征和属性,定义了怎样在其中存储数据。它们包括一些信息,比如可能存储什么数据,如何分解它以及如何命名信息等。这个描述表的信息集称为模式(Schema),模式描述了数据库内的特定表和整个数据库以及数据库内的表之间的关系(如果有的话)。

模式
 

关于数据库以及表布局和属性的信息。

{注意:模式还是数据库?} 偶尔也把模式(Schema或Schemata)用作数据库(Database)的同义词。遗憾的是,通常可以从上下文来清晰得知模式要表达的意思,在本书中,模式是指上述的定义。

1.1.3 列和数据类型

表由列组成,列包含表中特定的信息。


 

表中的单个字段。所有的表都由一列或多列组成。
理解列的最佳方式是把数据库表想象成网格,它有点像电子数据表,网格中的每一列都包含特定的信息。例如,在顾客表中,一列包含顾客编号,另一列包含顾客名字,而地址、城市、州和邮政编码都存储在它们各自的列中。

提示:分解数据
 

正确地把数据分解到多个列中极其重要。例如,城市、州和邮政编码应该总是存储在单独的列中。通过分解它们,就有可能按特定的列排序或筛选数据(例如,查找特定州或特定城市的所有顾客)。如果把城市和州结合进一列中,按州进行排序或筛选将极其困难。
数据库中的每一列都具有一种关联的数据类型,它定义了列中可以包含什么类型的数据。例如,如果列将包含数字(也许是订单中的商品数量),那么数据类型将是一种数值数据类型。如果列将包含日期、文本、注释、货币金额等,将使用相应的数据类型来指定它们。

数据类型
 

允许的数据的类型。每个表列都具有一种与之关联的数据类型,用以限制(或允许)在该列中存储特定的数据。
数据类型限制了列可以存储的数据的类型(例如,防止把字母字符输入到数值字段中)。数据类型的使用还有助于正确地排序数据,并且在优化磁盘使用方面起着重要作用。因此,在创建表时要特别注意选择适当的数据类型。

1.1.4 行

表中的数据存储在行中;保存的每条记录都存储在它自己的行中。同样,把表想象成电子数据表样式的网格,网格中的垂直列就是表列,水平行就是表行。

例如,顾客表可能每行存储一位顾客的信息。表中的行数就是其中的记录数。


 

表中的记录。
 

注意:记录或行?
 

你可能听到用户在提及行(Row)时把它们称为数据库记录(Record)。一般而言,可以互换使用这两个术语,但是行是技术上正确的术语。

1.1.5 主键

表中的每一行都应该有某一列(或列集合)唯一地标识它。包含顾客信息的表可能为此使用顾客编号列,而包含订单信息的表则可能使用订单ID。雇员表可能使用雇员ID或雇员社会安全号(Social Security Number)列。

主键
其值唯一地标识表中的每一行的列(或列集合)。
唯一地标识表中的每一行的这个列(或列集合)称为主键(Primary Key)。可以使用主键指代特定的行。如果没有主键,更新或删除表中的特定行将变得极其困难,因为没有方法可以保证受影响的行的安全。

提示:总是要定义主键
尽管主键实际上不是必需的,但是大多数数据库设计者都会确保他们创建的每个表都具有一个主键,以使得将来的数据操作是可能的并且容易管理。
可以把表中的任意列设定为主键,只要它满足以下条件即可:

任意两行都不能具有相同的主键值;
每一行都必须具有一个主键值(主键列可能不允许NULL值)。
提示:主键规则
 

这里列出的规则是由Oracle自身强制执行的。
通常在表中的单独一列上定义主键。但是,这不是必需的,可以把多个列一起用作主键。当使用多个列时,前面列出的规则必须适用于组织主键的所有列,并且所有列的值组合起来必须是唯一的(单独的列不需要具有唯一的值)。

提示:主键的最佳实践
 

除了Oracle强制执行的规则外,还应该遵守多个被普遍接受的最佳实践,包括:

不要更新主键列中的值;
不要重用主键列中的值;
不要使用主键列中可能改变的值(例如,如果使用名字作为主键来标识供应商,当供应商兼并以及更改其名字时,将不得不更改主键)。
另一种重要的键类型是外键,但是将在后面的第15章“连接表”中介绍它。

相关文章
|
1天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL游标属性:数据的“导航仪”与“仪表盘”
【4月更文挑战第19天】Oracle PL/SQL游标属性如同车辆的导航仪和仪表盘,提供丰富信息和控制。 `%FOUND`和`%NOTFOUND`指示数据读取状态,`%ROWCOUNT`记录处理行数,`%ISOPEN`显示游标状态。还有`%BULK_ROWCOUNT`和`%BULK_EXCEPTIONS`增强处理灵活性。通过实例展示了如何在数据处理中利用这些属性监控和控制流程,提高效率和准确性。掌握游标属性是提升数据处理能力的关键。
|
1天前
|
SQL Oracle 安全
Oracle的PL/SQL循环语句:数据的“旋转木马”与“无限之旅”
【4月更文挑战第19天】Oracle PL/SQL中的循环语句(LOOP、EXIT WHEN、FOR、WHILE)是处理数据的关键工具,用于批量操作、报表生成和复杂业务逻辑。LOOP提供无限循环,可通过EXIT WHEN设定退出条件;FOR循环适用于固定次数迭代,WHILE循环基于条件判断执行。有效使用循环能提高效率,但需注意避免无限循环和优化大数据处理性能。掌握循环语句,将使数据处理更加高效和便捷。
|
1天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL条件控制:数据的“红绿灯”与“分岔路”
【4月更文挑战第19天】在Oracle PL/SQL中,IF语句与CASE语句扮演着数据流程控制的关键角色。IF语句如红绿灯,依据条件决定程序执行路径;ELSE和ELSIF提供多分支逻辑。CASE语句则是分岔路,按表达式值选择执行路径。这些条件控制语句在数据验证、错误处理和业务逻辑中不可或缺,通过巧妙运用能实现高效程序逻辑,保障数据正确流转,支持企业业务发展。理解并熟练掌握这些语句的使用是成为合格数据管理员的重要一环。
|
SQL Oracle 关系型数据库
Oracle SQL优化之多表连接
Oracle SQL优化之多表连接
430 0
Oracle SQL优化之多表连接
|
SQL 关系型数据库 Oracle
ORACLE SQL优化之ORA-03150&ORA-02055&ORA-02063
                                                                                                             >   
4763 0
|
SQL 存储 Oracle
Oracle SQL语句优化方法总结
  1、SQL语句尽量用大写的   因为oracle总是先解析SQL语句,把小写的字母转换成大写的再执行。   2、使用表的别名   当在SQL语句中连接多个表时, 尽量使用表的别名并把别名前缀于每个列上。这样一来,   就可以减少解析的时间并减少那些由列歧义引起的语法错误。   3、选择最有效率的表名顺序(只在基于规则的优化器(RBO)中有效)
166 0
|
SQL Oracle 关系型数据库
|
SQL Oracle 关系型数据库
好书推荐—《基于Oracle的SQL优化》
这是一本全书都在讲SQL性能优化的书。 这是国内目前SQL优化最详尽的一本书。 读了这本书,你会发现,SQL优化其实不是感觉的那么难。 这本书挺厚,800多页,对比它的价格,100多人民币,物有所值。
1207 0
|
SQL 算法 Oracle
看了此文,Oracle SQL优化文章不必再看!
  第一章 看了此文,Oracle SQL优化文章不必再看! DBAplus社群 | 2015-11-17 23:44 目录SQL优化的本质 SQL优化Road Map 2.
1368 0

推荐镜像

更多