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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/115925.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【进阶C语言】字符串与内存库函数认识与模拟实现

本章内容大致目录: 1.strlen函数 2.strcpy函数 3.strcmp函数 4.strcat函数 5.strstr函数 6.strtok函数 7.strerror与perror函数 8.字符操作函数 9.内存操作函数 10.总结 以上函数均属于库函数,有的函数则会介绍如何模拟实现。 一、strlen函数…

蓝桥杯每日一题2023.9.22

4960. 子串简写 - AcWing题库 题目描述 题目分析 原本为纯暴力但是发现会超时,可以加入前缀和,从前往后先记录一下每个位置c1出现的次数 再从前往后扫一遍,如果遇到c2就将答案加上此位置前的所有c1的个数(直接加上此位置的前缀…

Ubuntu22.04 vnc远程黑屏

一、原因 原因是Ubuntu22.04使用的gnome启用了Wayland。vnc、teamviewer、向日葵、todesk等均无法使用或者远程黑屏等。 简单的说vnc、teamviewer、向日葵、todesk等均基于xorg实现(xorg太流行),并不兼容Wayland,所以vnc无法正常…

iOS 17 Simulator Failed with HTTP status 400:bad request

升级 xcode 15 要 ios17 的 sdk 才能运行,但是更新这个 sdk 400 错误了 解决方案: 直接去官网下载开发者后台下载dmg文件,使用命令行快速安装即可 https://developer.apple.com/documentation/xcode/installing-additional-simulator-runti…

医学影像信息(PACS)系统软件源码

PACS系统是PictureArchivingandCommunicationSystems的缩写,与临床信息系统(ClinicalInformationSystem,CIS)、放射学信息系统(RadiologyInformationSystem,RIS)、医院信息系统(HospitalInformationSystem,HIS)、实验室信息系统(L…

3288S Android11 适配红外遥控功能(超详细)

目录 一、rk3288平台红外遥控介绍二、原理图分析三、配置设备树并使能红外遥控功能四、打开红外打印功能,查看红外遥控的用户码和键值五、将查看到的红外遥控用户码和键值添加到设备树和.kl文件六、Android红外遥控.kl文件映射知识和使用添加新的.kl文件七、补充&am…

3、ARIMA序列预测Matlab代码、可视化(可做算法对比)

1、文件包中程序均收集、整理、汇总自网络。 2、文件包完整内容: 1)【ARIMA-功能函数】仅包含一个ARIMA算法函数,需要调用到自己的程序中使用。 函数部分代码及预览图: function [result] ARIMA_algorithm(data, Periodicity,…

python脚本批量创建数据

背景 批量创建测试数据,利用python自带的库如faker库,节省大量的人工。准备工作 1、安装python,参考地址 https://www.runoob.com/python3/python3-install.html 2、设置环境变量(不同操作系统) PATH“$PATH:/usr/local/bin/python” 3、查…

【深度学习】实验13 使用Dropout抑制过拟合

文章目录 使用Dropout抑制过拟合1. 环境准备2. 导入数据集3. 对所有数据的预测3.1 数据集3.2 构建神经网络 3.3 训练模型3.4 分析模型 4. 对未见过数据的预测4.1 划分数据集4.2 构建神经网络4.3 训练模型4.4 分析模型 5. 使用Dropout抑制过拟合5.1 构建神经网络5.2 训练模型5.3…

进入数据结构的世界

数据结构和算法的概述 一、什么是数据结构二、什么是算法三、如何去学习数据结构和算法四、算法的时间复杂度和空间复杂度4.1 算法效率4.2 大O的渐进表示法4.3 时间复杂度4.4 空间复杂度4.5 常见复杂度对比 一、什么是数据结构 数据结构是计算机存储、组织数据的方式。&#x…

基于Spring Boot的医院预约挂号系统设计与实现(源码+lw+部署文档+讲解等)

前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻…

【虚拟化】虚拟机vcpu绑核物理机

文章目录 一、NUMA二、虚拟机xml配置解析 参考文章 第一篇:KVM虚拟化CPU技术总结 第二篇:虚机cpu和mem的配置(cputune和numatune) 第三篇:libvirt 中cpu, numa 的配置 第四篇:如何提高虚拟机性能&#xff1…