数据库中的DDL与DML

标签:数据库

记录下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,因为要指明从哪个表获取数据。但心里还是没个底。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值