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

  • 相关阅读:
    OpenCL编程指南-9.3使用事件完成评测、内核中的事件、OpenCL外部的事件
    推荐学java——MyBatis高级
    2022 最新最全 Java 面试八股文(整整 1685 页,14 个技术栈,20 余万字)
    yum clean all 后导致yum报错排查解决方案
    排列生成算法:集合的全排列
    docker登录不上
    区块链论文速读A会-ATC 2024 如何降低以太坊存档节点的存储要求?
    TLS/SSL 详解
    基于ssm的养老智慧服务平台毕业设计源码071526
    vscode 搜索界面的files to include files to exclude 是什么功能?
  • 原文地址:https://blog.csdn.net/white_night_SZTU/article/details/133212922