SQL 就是我们的一切

正如您可能已经猜到的那样,所有发给 SQL 服务器的命令都可以通过 SQL 查询给出。一切。

这些团队被正式分为 4 组:

  • 数据定义语句(Data Definition Language,DDL):

    • CREATE创建数据库对象(数据库本身、表、视图、用户等)
    • ALTER改变一个对象
    • DROP删除一个对象
  • 数据操纵运算符(Data Manipulation Language,DML):

    • SELECT选择满足给定条件的数据
    • INSERT添加新数据
    • UPDATE更改现有数据
    • DELETE删除数据
  • 数据访问定义运算符(数据控制语言,DCL):

    • GRANT授予用户(组)对对象执行某些操作的权限
    • REVOKE撤销先前颁发的权限
    • DENY设置优先于许可的禁令
  • 事务控制语言 ( TCL )语句:

    • COMMIT应用事务
    • ROLLBACK回滚当前事务上下文中所做的所有更改
    • SAVEPOINT将交易分成更小的部分

而前两个层次,我们只研究了 SELECT 语句的变种。想象一下未来有多少有趣的事情等待着我们。

但是我们这里主要是针对Java程序员准备的,所以我们会研究那些你在工作中肯定会遇到的场景。

项目的系统管理员很可能会创建所有的数据库,但您肯定需要自己多次从数据中进行选择。

而且,有时你的代码不会把所有的数据都写入数据库,或者写错了,所以你常常不得不拿着笔爬进去,看看那里到底存了些什么。

让我们再次回顾一下我们在之前的讲座中提到的内容。

在数据库中创建模式

要在 DBMS 中创建新模式,您需要运行以下命令:

CREATE SCHEMA Name;

这是最简单的选择。此外,在创建新架构时,您可以指定数据编码格式和其他参数。

如果你想删除模式,但你不确定它是否存在,那么你需要运行命令:

DROP SCHEMA IF EXIST Name;

您会经常在具有不同数据库备份的文件中看到这些命令,这就是我将它们带到这里的原因。

选择当前模式

如果您的 DBMS 中有很多模式,那么很容易发生不同模式具有相同表的情况。为避免混淆,您可以做两件事:

  • 始终将架构名称放在表名称之前
  • 指定默认模式

让我们编写一个查询,从用户表中选择数据,该表位于测试模式中。它看起来像这样:

SELECT * FROM test.user;

如果您需要在一个查询中连接 (JOIN) 来自不同模式的多个表,这是必不可少的。

顺便说一句,在 Java 语言中我们经常做类似的事情:如果在代码中我们需要使用来自不同包的同名类,我们在类名之前添加包名。

第二种方式是指定默认模式。如果查询指定表名但没有模式,则使用默认模式。为此,请使用USE 语句

USE name - schemes;

让我们使用 USE 语句重写之前的查询:

USE test;
SELECT * FROM user;

创建视图

除了包含真实数据的表之外,SQL 还允许您存储虚拟表之类的东西,其中数据是从真实表中提取的。这样的虚拟表称为VIEW。

这样的表不能存储真实的数据,每次访问都是从真实的表中拉取数据。这种 VIEW 的内容是使用 SQL 查询指定的。

您可以使用以下命令从任何 SELECT 查询创建一个 VIEW:

CREATE VIEW Name AS
SELECT-request;
让我们编写一个查询,该查询将基于员工表创建一个 public_employee 虚拟表,其中将隐藏员工薪水信息:
CREATE VIEW public_employee AS
SELECT id, name FROM employee

在上面的示例中,我们的表 (VIEW) public_employee 将仅包含员工 ID 和他们的姓名,但不包含有关他们薪水的信息。您可以在与真实表格相同的地方使用此类视图。

为什么需要视图?它们具有许多优点:

灵活控制对信息的访问。您可以只授予某些用户访问 VIEW 的权限,而不授予对表的访问权限。在视图中,只从表中取出公共信息。此外,如果以后在表中添加了具有重要信息的新列,也不会意外进入View。

数据反规范化。为了方便存储,数据往往被分成成百上千个表,但是对于普通人来说处理这样的数据并不是很方便——你必须编写太复杂的查询。使用 View,您可以创建虚拟表,在单个表中显示来自数十个不同表的数据。

多态和封装。您可以更改数据库的结构。同时,使用您的视图的程序用户不会猜到某些东西已经改变。并且无需重写有权访问 View 的程序代码。您只需要调整与 VIEW 相关的 SQL 脚本。

只读。View 只能通过 SELECT 查询设置,因此使用 View 不能以任何方式更改真实表中的数据。顺便说一句,这是支持查询缓存的另一个优点。但下次会更多。