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;
CREATE VIEW public_employee AS
SELECT id, name FROM employee
在上面的示例中,我们的表 (VIEW) public_employee 将仅包含员工 ID 和他们的姓名,但不包含有关他们薪水的信息。您可以在与真实表格相同的地方使用此类视图。
为什么需要视图?它们具有许多优点:
灵活控制对信息的访问。您可以只授予某些用户访问 VIEW 的权限,而不授予对表的访问权限。在视图中,只从表中取出公共信息。此外,如果以后在表中添加了具有重要信息的新列,也不会意外进入View。
数据反规范化。为了方便存储,数据往往被分成成百上千个表,但是对于普通人来说处理这样的数据并不是很方便——你必须编写太复杂的查询。使用 View,您可以创建虚拟表,在单个表中显示来自数十个不同表的数据。
多态和封装。您可以更改数据库的结构。同时,使用您的视图的程序用户不会猜到某些东西已经改变。并且无需重写有权访问 View 的程序代码。您只需要调整与 VIEW 相关的 SQL 脚本。
只读。View 只能通过 SELECT 查询设置,因此使用 View 不能以任何方式更改真实表中的数据。顺便说一句,这是支持查询缓存的另一个优点。但下次会更多。
GO TO FULL VERSION