标签:数据库
记录下DDL和DML的相关概念。
数据定义语言
定义数据库模式
数据定义语言DDL(Data-Definition Language)可定义数据库模式。数据库模式在之前的文章中已经提到过了。简单来说,建表用的SQL语句就是DDL。如下代码
CREATE TABLE department(dept_name char(20),building char(15),budget numeric(12,2));
这个SQL语句便定义了一张“department”表。并定义了该表有三个列,以及与该列相关的数据类型。
为什么要有DDL呢?之前提到数据库模式的时候有说过:模式是预先设计好的。比如上面这个department表:按照生活常识来讲,部门名字不会是单个数字,而预算金额一般是纯数字。所以我们限制“dept_name”列的数据类型为char,”budget“列的数据类型为numeric(数字的)。
结合生活经验也能知道,存储在数据库中的数据值都必须要满足某些一致性约束。除了程序员规定的一致性约束之外,数据库系统本身实现的则为(数据)完整性约束。
写者注
一致性约束:比如我们规定一个人的姓名不允许为“123”。如果出现了该情况,表明有错误的数据(此处为错误的数据类型)进入到了姓名数据库中,导致该数据和该数据库的约束”不一致“。
- 域约束(domain constraint):每个数据必须对应一个所有可能取值构成的域。域约束也是完整性约束的最基本形式。
- 引用完整性(referential integrity):举个例子。你考完驾照后,在驾照的数据库(假设有的话)中会录入你的名字Yname。此前在公安局那边的人口数据库中也应该有你对应的YName。简单来说:你驾照上的名字必须是人口数据库中真实存在的,你驾照上的名字实际上是引用了人口数据库中的“Name”列中的值。
- 授权(authorization):不同用户对于数据库的不同数据有不同的访问权限。这个也很好理解。比如你只能读取你银行卡有多少钱,但不能直接修改你的银行卡金额,也不能删除别人的银行卡账户。
数据操纵语言
访问或操控数据
如果说DDL是总工程师,那数据操控语言DML(Data-Manipulation Language)就是下面搬砖的。
DML有以下几种访问类型:
- 对存储在数据库中的信息进行检索
- 向数据库插入新的信息
- 删除数据库中的信息
- 修改数据库中的信息
DML有以下两种类型:
- 过程化的DML(procedural DML):要求用户指定需要什么数据,以及如何获得这些数据。
- 声明化的DML(declarative DML):也称为非过程化的DML。只要求用户指定需要什么数据。
很明显后者比过程化的DML简单,我们在SQL中最常用的“查询语句“(query language)就是非过程化的DML。比如下面这段最直接的查询代码:
SELECT * FROM department;
在mysql中试一下,效果如图
而过程化的DML在Oracle那块的PL/SQL“貌似”经常被提及,以后碰到再记录吧。
写者注
去博客园上也没找到专门说“过程化DML”的文章。虽然我个人认为像SELECT这种应该算过程化的DML,因为要指明从哪个表获取数据。但心里还是没个底。