英语原文共 426 页,剩余内容已隐藏,支付完成后下载完整资料
SQL实用介绍
结构化查询语言(SQL)是被广泛使用的与数据库管理系统互动的语言。本附录的目的不是提供一个全面的SQL手册,而是列出和解释最常见的概念,术语和陈述。大多数的数据库管理系统不支持整个SQL标准。
此外,在实际过程中,商家有时添加一些非标准的元素使其防止完全移植到数据库管理系统。在本附录中,我将限制自己建立新元素。为帮助你识别标准关键词,我已经包含B-12表格在附录的最后,列出了标准关键词应与大多数的实现。
注意:除非另有说明,所有的SQL语句,你会发现在这个附录参考和测试SQL的MySQL的实现。
SQL术语
数据被组织在行和列形成的表中,这是一种自然的组织数据的方式,你可以通过电子表格的使用来熟悉它。然而,尽管有一些相似之处,一个数据库表并不是一个Excel工作表。例如,在电子表格中,您可以将数据类型分配给单个的单元格,而在数据库中,列的所有单元都具有相同的数据类型。列定义是表结构的核心,每一个都有其名称和所允许的数据类型。
例如,一个员工表可能包含列名叫名、姓、和社会安全号包含字符串的文本;列命名员工编号和年薪将包含数字;列名叫生日和入职日期将包含日期。与每个雇员关联的数据将被存储到一行中。
字段是表中的一个单独的数据项,对应于行和列的交集。这是电子表格中的一个单元格。
可以将一个或多个列指定为惟一的键,用于标识每个员工。为了这个目的,您可以使用前面提到的一列(例如员工编号)或者是姓和名的组合。在首选项中使用的惟一键称为表的主键。
一个额外的类型的关键是外键。在这种情况下,列被定义为引用另一个表的一个唯一键。除了避免重复数据外,这种类型的约束也增加了数据库的一致性。例如,这个表包含客户合同可能包括一列指员工表中定义的列的员工编号。这将确保每一份合同都与现有的销售人员相关联。
为每个关键数据库管理系统可以建立一个索引,这样可以更快地检索数据。这显然会减慢插入和删除行(即:新记录),因为数据库管理系统将不得不花时间更新索引,但大多数数据库比修改更频繁地审问。因此,它通常支付定义索引,至少那些可以加快最常见的查询。这里有一个提示从Excel的另一个区别:在一个数据库表,数据项不移动一旦插入。如果您想要以特定的顺序访问它们,您必须对它们进行排序,或者创建索引。在本附录中,您将了解关于索引的知识。
有时只显示一些列和行是有用的,就好像它们是自己的表一样,这样的虚拟表被称为视图。在某些情况下(我将进一步讨论这个当我描述单个语句,在本章后面),您还可以使用视图来收集来自不同表和列处理它们,好像他们属于一个表。
事务
事务值得更多关注,因为他们代表数据库管理系统中的关键概念。事务表示一系列数据库操作,必须不间断地执行——也就是说,没有任何其他操作“淡入”在他们之中。要理解这一点,你必须考虑并发访问相同的表。
例如,想象一下下面的场景,有两个资金转移涉及三个银行账户:
1.从账户A转移100美元到帐户B
2.从账户B转移200美元到账户C
从概念上讲,每个传输都由以下操作组成:
bull;读取源账户的余额。
bull;在其中减少转移的数量。
bull;写入数据。
bull;赌气目标帐户的余额。
bull;在其中增加转移的数量。
bull;写入数据。
现在,想象一下转移2的开始,而转移1还没有完全完成,如表b-1中所示的基本操作序列所示。
表B - 1 序列的基本操作
编号 |
转移 |
操作描述 |
1. |
1. |
读取账户A的余额 |
2. |
1. |
减少账户A的余额100美元 |
3. |
1. |
写回账户A的余额 |
4. |
1. |
读取账户B的余额 |
5. |
1. |
增加账户B的余额100美元 |
6. |
2. |
读取账户B的余额 |
7. |
2. |
减少账户B的余额200美元 |
8. |
2. |
写回账户B的余额 |
9. |
2. |
读取账户C的余额 |
10. |
2. |
增加账户C的余额200美元 |
11. |
1. |
写回账户B的余额 |
12. |
2. |
写回账户C的余额 |
账户B的所有者将会非常高兴,因为他最终将得到比他实际拥有的多200美元。问题是,编号为6和11的两个步骤应该没有按顺序执行。假设帐户B最初持有500美元,最后,它应该持有500美元 100 美元- 200美元 = 400美元。但事实并非如此,就在第一次转移结束前,当600美元的余额即将被收回时,第二次转移开始了。存储在数据库中B账户的余额被改变为第二次转移后的结果,但当第一次转移恢复和完成后,600美元别写入账户B的余额。第二个转移的效果变成了“被遗忘的”,对账户B而言,第二个转移就像没发生一样。
你可以通过将每个传输作为事务处理来解决这个问题。在第一个完成之前,第二个传输将不会启动,到那时,帐户B的余额将被更新,以反映第一个传输。
事务的特点是四个属性—原子性、一致性、隔离性和持久性(ACID):
bull;原子性:它保证所有执行一个操作的各个步骤或根本没有。你必须不能执行部分事务。
bull;一致性:它指的是一个事务不应该违反数据库的完整性的事实。例如,它不应该在一个应该是正数的数值字段中存储一个负数。当涉及到分布式系统时,它也意味着所有节点都具有一致的值。
bull;隔离性:这意味着并发操作不能看到一个事务的中间值。缺乏隔离就是导致了表的例子B - 1失败的原因,账户B的余额可以读即使修改它的交易还没有完成。不幸的是,交易的序列化(即他们一个接一个地)影响性能正是当有高工作负载。缺乏隔离是一个问题在这个例子中,但这并非总是如此。例如,它可能并不重要,搜索的产品列表时发生产品被添加或删除。考虑到潜在的对性能的影响,在某些情况下您可能决定忽略并发事务的存在。
bull;耐用性:指的是数据库管理系统来保证事务的能力,一旦完成,是永远不会“忘记”,即使在系统故障。
约定
我将使用下面的约定来描述SQL语句:
bull;SQL关键字,您必须输入准确在大写(如,CREATE)。注意,大多数关键字实际上都是小写的。
bull;变量的值小写(如,db_name)。
bull;你可以省略元素包含在方括号(如,[WITH])。
bull;引用进一步定义是用尖括号括起来的(如,lt; create_spec gt;)。
bull;方括号中写省略号意味着您可以重复元素之间的封闭支架(如,[hellip;]lt; create_spec gt;)。也就是说,您可以省略元素,输入一次,或者多次输入。
bull;互斥方案是包含在花括号中用竖线隔开(如,{数据库|模式})。您必须输入其中一个(并且只有一个)。
bull;我关闭每个语句用分号,虽然严格来说,这不是官方的语法的一部分。我这样做是因为它使阅读变得更容易,并提醒您必须在包含脚本中的语句时输入分号。
例如,列表B - 1显示了SQL语句的一部分,用来创建一个数据库。它始于创建关键字或数据库模式和数据库名称。然后可以(但不是必须)添加一个或多个lt; create_spec gt;元素,分别定义的意义。
列表B-1 SQL语句的语法
CREATE {DATABASE | SCHEMA} db_name [lt;create_specgt; ...];
声明
一般来说,不管我们谈论组织数据库,表结构,或实际的数据,您需要执行四个基本操作:创建、检索、更新和删除(CRUD)。对应的SQL语句从一个标识操作的关键字开始(如,插入、选择、更新或删除),然后在必要时通过关键字指定什么类型的实体要执行的操作(如,数据库、表或索引)和额外的元素。您可以使用查询语句来检索信息。
您可以使用创建语句创建数据库、表和索引,并使用更新语句更新它们,并使用丢弃语句删除它们。类似地,您可以使用创建语句和丢弃语句创建和删除视图,但是一旦创建了它们,就无法更新它们。您可以使用增加语句来在表中创建新的行,并且使用删除语句来删除它们。更新语句允许您修改整个行或其中一个或多个单独的字段。
让你修改的语句结构统称为数据定义语言(DDL),而那些让你修改的内容被称为数据操作语言(DML)。
也就是说,你不会找到任何关于修改索引在数据库和改变这个附件的方法,因为很少有你可以更新数据库或一旦你创建一个索引定义的机会,和数据库管理系统之间没有协议供应商让你可以做什么。表B - 2显示了可能的组合的关键词摘要。在下面几节中,我将解释如何使用它们经历表B - 2的列。这将告诉你如何创建新结构和新数据,如何修改,如何删除它们。
表B-2 创建、更新和删除的SQL关键字
实体 |
创建 |
更新 |
删除 |
数据库 |
创建 |
~n/a |
丢弃 |
表格 |
创建 |
变更 |
丢弃 |
索引 |
创建 |
~n/a |
丢弃 |
视图 |
创建 |
n/a |
丢弃 |
行 |
插入 |
更新 |
删除 |
在许多应用程序中,数据库、表、索引和视图的结构在最初定义后仍然保持不变。因此,您的应用程序通常只需要在行和字段中操作的语句。在任何情况下,您肯定都需要查询语句,您可以根据其结构和所包含的数据对数据库进行查询。最后,为了完成在开发应用程序时可能需要的语句列表,我还将描述启动事务、提交和回滚,您需要使用事务。
在/*和*/之间的是SQL的所有解释文本并且会忽略它。
注意:在所有的语句中,您总是可以使用表中的列位置而不是列名。SQL中的列编号从1开始。在某些特定的情况下,这可能是有用的,但是很少使用它,因为它会导致错误和难以维护的代码。
WHERE条件
当你想要检索、更新或删除行,你显然需要识别它们。你这样做的关键字,后跟一个lt; where_condition gt;。列表B - 2显示了这个条件的格式。我解释之前讨论单个语句,因为你需要几个。
列表B - 2 WHERE条件语句
lt;where_conditiongt; = {
col_name {= | lt; | gt; | lt;= | gt;= | !lt; | !gt; | lt;gt; | !=} lt;valgt;
| col_name [NOT] BETWEEN lt;valgt; AND lt;valgt;
| col_name [NOT] LIKE lt;valgt; [ESCAPE lt;valgt;]
| col_name [NOT] IN (lt;valgt; [, lt;valgt; ...])
| col_name IS [NOT] NULL
| col_name [NOT] CONTAINING lt;valgt;
| col_name [NOT] STARTING [WITH] lt;valgt;
| NOT lt;search_conditiongt;
| lt;where_conditiongt; OR lt;where_conditiongt;
| lt;where_condit
全文共7854字,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[143838],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。