前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据库必会必知 之 SQL四种语言:DDL DML DCL TCL

数据库必会必知 之 SQL四种语言:DDL DML DCL TCL

作者头像
二哥聊运营工具
发布于 2021-12-17 00:13:02
发布于 2021-12-17 00:13:02
31900
代码可运行
举报
文章被收录于专栏:程序员泥瓦匠程序员泥瓦匠
运行总次数:0
代码可运行

作者:泥瓦匠 今天群里面讨论,DDL 还是 DML,我这种小白还是总结下他们的区别吧。

1. DDL – Data Definition Language

数据库定义语言:定义数据库的结构。

其主要命令有CREATE,ALTER,DROP等,下面用例子详解。该语言不需要commit,因此慎重。

CREATE – to create objects in the database 在数据库创建对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
例:CREATE DATABASE test; // 创建一个名为test的数据库

ALTER – alters the structure of the database 修改数据库结构

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
例:ALTER TABLE test ADD birthday date; // 修改test表,新增date类型的birthday列

DROP – delete objects from the database 从数据库中删除对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
例:DROP DATABASE test;// 删除test数据库

还有其他的:

TRUNCATE – 截断表内容(开发期,还是挺常用的)

COMMENT – 为数据字典添加备注

2. DML – Data Manipulation Language

数据库操作语言:SQL中处理数据库中的数据

其主要命令有SELECT,INSERT,UPDATE,DELETE等,这些例子大家常用就不一一介绍了。该语言需要commit。还有常用的 LOCK TABLE ,记得写过锁的博客 – 传送门

还有其他不熟悉的:

CALL – 调用一个PL/SQL或Java子程序 EXPLAIN PLAN – 解析分析数据访问路径

3. DCL – Data Control Language

数据库控制语言:授权,角色控制等

GRANT – 为用户赋予访问权限

REVOKE – 撤回授权权限

4. TCL – Transaction Control Language

事务控制语言

COMMIT – 保存已完成的工作

SAVEPOINT – 在事务中设置保存点,可以回滚到此处

ROLLBACK – 回滚

SET TRANSACTION – 改变事务选项

例子:Java中JDBC封装了对事务的支持。比如我们首先新建一个表:test

test.sql

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;
 
-- ----------------------------
--  Table structure for `city`
-- ----------------------------
DROP TABLE IF EXISTS `city`;
CREATE TABLE `city` (
  `id` int(11) NOT NULL DEFAULT '0' COMMENT '城市ID',
  `name` varchar(20) DEFAULT NULL COMMENT '名称',
  `state` varchar(20) DEFAULT NULL COMMENT '状态',
  `country` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
SET FOREIGN_KEY_CHECKS = 1;

JDBC事务回滚第一个例子 -JDBC数据库事务回滚:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 描述:JDBC数据库事务回滚
 *
 * Created by bysocket on 16/6/6.
 */
public class TransactionRollBack extends BaseJDBC {
 
    public static void main(String[] args) throws SQLException {
        Connection conn = null;
        try {
            // 加载数据库驱动
            Class.forName(DRIVER);
            // 数据库连接
            conn = DriverManager.getConnection(URL,USER,PWD);
 
            // 关闭自动提交的事务机制
            conn.setAutoCommit(false);
            // 设置事务隔离级别 SERIALIZABLE
            conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
 
            Statement stmt = conn.createStatement();
            int rows = stmt.executeUpdate("INSERT INTO city VALUES (3,'china',1,'cc')");
            rows = stmt.executeUpdate("UPDATE city set country = 'TAIWAN' WHERE id = 4");
 
            // 提交事务
            conn.commit();
        } catch (Exception e) {
            e.printStackTrace();
            // 回滚事务
            if (conn != null) {
                conn.rollback();
            }
        } finally {
            /** 关闭数据库连接 */
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

第 19 行:设置了事务隔离级别为 SERIALIZABLE 底层调用的是TCL语言的SET TRANSACTION

第 22 行:执行通过,插入数据

第 23 行:执行不通过,没有主键为4的记录,直接抛出异常

第 31 行:事务回滚,封装的就是 TCL 语句的ROLLBACK

休息下,一个例子不够,再来一个。代码都在github主页上。https://github.com/JeffLi1993/jee-component-learning

JDBC事务回滚第二个例子-JDBC数据库事务回滚,回滚到特定的保存点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 描述:JDBC数据库事务回滚,回滚到特定的保存点
 *
 * Created by bysocket on 16/6/6.
 */
public class TransactionRollBack2 extends BaseJDBC {
    public static void main(String[] args) throws SQLException {
        Connection conn = null;
        Savepoint svpt = null;
        try {
            // 加载数据库驱动
            Class.forName(DRIVER);
            // 数据库连接
            conn = DriverManager.getConnection(URL,USER,PWD);
 
            // 关闭自动提交的事务机制
            conn.setAutoCommit(false);
            // 设置事务隔离级别 SERIALIZABLE
            conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
 
            Statement stmt = conn.createStatement();
            int rows = stmt.executeUpdate("INSERT INTO city VALUES (3,'china',1,'cc')");
            // 设置事务保存点
            svpt = conn.setSavepoint();
            rows = stmt.executeUpdate("UPDATE city set country = 'TAIWAN' WHERE id = 4");
 
            // 提交事务
            conn.commit();
        } catch (Exception e) {
            e.printStackTrace();
            // 回滚事务
            if (conn != null) {
                conn.rollback(svpt);
            }
        } finally {
            /** 关闭数据库连接 */
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

和第一个例子重复的就不提了。

第 9 行:声明了一个保存点

第 24 行:设置了保存点

第 33 行:回滚事务到该保存点

上面的代码涉及到的是 TCL语言中的 SAVEPOINT

最后来张图总结:

如以上文章或链接对你有帮助的话,别忘了分享到朋友圈,让更多的人阅读这篇文章。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员泥瓦匠 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Linux 下从头再走 GTK+-3.0 (一)
  原本由于项目需求在 Linux 下学习过一段时间的 GTK+2.0 图形开发,时隔一段时间,想真正深入学习一下 GTK 。
RainMark
2019/09/10
2.4K0
Linux 下从头再走 GTK+-3.0 (一)
Python安装cairo、gtk等问题
上一篇博文关于cairo的安装,使用过程中发现,画图还需要gtk等模块,所以需要继续安装。我安装gtk的过程很是折腾啊,下载了好多版本,不同格式文件,但最终还是安装成功了,哈哈,现把安装过程记录如下:
py3study
2020/01/10
2.4K0
glib和glibc_libc.so.6 version GLIBC_2.14
转自:http://blog.csdn.net/yasi_xi/article/details/9899599
全栈程序员站长
2022/09/20
1.8K0
Qt+opencv+EasyPR(车牌识别系统,从配置环境到成功运行)
最近在东软睿道实训搞一个车牌识别系统,所用材料为Qt+opencv+EasyPR,从配环境到成功运行历时几天颇为艰难,这里写篇经验贴,手把手教你~ 作者:张俊怡       2017/7/21      东北大学 俗话说巧妇难为无米之炊,所以得首先准备所需材料: 1、Qt  版本为5.5.1 32位  下载地址为 https://www.qt.io/download/ 2、opencv 版本为3.2.0  下载地址为http://opencv.org/opencv-3-2.html 3、Easy
张俊怡
2018/04/24
3.5K0
Qt+opencv+EasyPR(车牌识别系统,从配置环境到成功运行)
Linux 下从头再走 GTK+-3.0 (五)
  实践中表明,纯粹利用 gtk 函数来创建 UI 是很繁琐的事,需要编写很多代码。怎样才能快速统一的建立 UI 布局呢?
RainMark
2019/09/10
1.1K0
Linux 下从头再走 GTK+-3.0 (五)
pkg-config工具的使用
2、pkg-config软件官网:http://www.freedesktop.org/wiki/Software/pkg-config/
ccf19881030
2019/04/23
3.2K0
pkg-config 用法
在进行使用fuse 2.9写程序的时候,遇到了pkg-config 命令和 .pc 文件。本篇博客就具体说明一下pkg-config 命令是什么?
西湖醋鱼
2020/12/30
2K0
pkg-config 用法
小朋友学C语言(1):安装Codeblocks编程工具
编译器是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的工具。一个现代编译器的主要工作流程:源代码(source code) -->预处理器 (preprocessor) -->编译器 (compiler) -->目标代码 (object code) -->链接器 (linker) -->可执行程序 (executables)。 高级计算机语言便于人类编写、阅读、交流和维护。机器语言是能直接被计算机接解读、运的。编译器将汇编或高级计算机语言源程序(Source program)作为输入,翻译成目标语言(Target language)机器代码的等价程序。源代码一般为高级语言 (High-level language), 如C、C++、Java或汇编语言,而目标语言则是机器语言的目标代码(Object code),有时也称作机器代码(Machine code)。
海天一树
2019/06/03
1.2K0
怎么样Eclipse IDE for C/C++ Developers正确编译GTK规划?(解决)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116778.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/06
5920
gtk还有人用吗_iperf使用方法
GTK+(GIMP Toolkit)是一套源码以LGPL许可协议分发、跨平台的图形工具包。最初是为GIMP写的,已成为一个功能强大、设计灵活的一个通用图形库,是GNU/Linux下开发图形界面的应用程序的主流开发工具之一。并且,GTK+也有Windows版本和Mac OS X版。 GTK+ 是一种图形用户界面(GUI)工具包。也就是说,它是一个库(或者,实际上是若干个密切相关的库的集合),它支持创建基于 GUI 的应用程序。可以把 GTK+ 想像成一个工具包,从这个工具包中可以找到用来创建 GUI 的许多已经准备好的构造块。差不多已经 10 年过去了。今天,在 GTK+ 的最新稳定版本 —— 2.8 版上(3.0测试中),仍然在进行许多活动,同时,GIMP 无疑仍然是使用 GTK+ 的最著名的程序之一,不过它已经不是惟一的使用 GTK+ 的程序了。已经为 GTK+ 编写了成百上千的应用程序,而且至少有两个主要的桌面环境(Xfce 和 GNOME)用 GTK+ 为用户提供完整的工作环境。 GTK+虽然是用C语言写的,但是您可以使用你熟悉的语言来使用GTK+,因为GTK+已经被绑定到几乎所有流行的语言上,如:C++,PHP, Guile,Perl, Python, TOM, Ada95, Objective C, Free Pascal, and Eiffel。
全栈程序员站长
2022/11/01
1.3K0
gtk还有人用吗_iperf使用方法
Ubuntu 14.04 LTS下使用arm-linux-gcc交叉编译OpenCV 2.4.9
本文介绍了如何将OpenCV库移植到ARM平台上,包括编译工具链、依赖库、配置方法以及运行时注意事项。
剑影啸清寒
2018/01/02
9.6K1
Ubuntu 14.04 LTS下使用arm-linux-gcc交叉编译OpenCV 2.4.9
linux ettercap,CentOS下安装ettercap
http://ettercap.sourceforge.net/download.php
全栈程序员站长
2022/09/14
1.2K0
linux ettercap,CentOS下安装ettercap
glib:windows下基于MSYS2环境编译glib2的过程
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/80399355
10km
2019/05/25
3.5K0
史上最强IDE集成开发环境——Code::Blocks简介及安装
Code::Blocks采用两种方法的版本命名,这一点大家需要了解,以免搞胡涂了。
Enjoy233
2019/03/05
3.3K0
史上最强IDE集成开发环境——Code::Blocks简介及安装
GCC编译选项_需要使用安全编译选项的语言
gcc和cc是一样的,c++和g++是一样的。一般c程序就用gcc编译,c++程序就用g++编译
全栈程序员站长
2022/11/15
1.3K0
GCC编译选项_需要使用安全编译选项的语言
全志 Tina Linux 图形系统 框架介绍 最全介绍 MiniGUI、QT5、EFL、GTK+(WebkitGtk、Midori)、DirectFB、Wayland
本文档将介绍 Allwinner Tina Linux 中已经移植好的窗口系统,以及怎么使用,包括 MiniGUI、QT5、EFL、GTK+(WebkitGtk、Midori)、DirectFB、Wayland,整体结构 如下:
韦东山
2022/12/28
17.6K0
全志 Tina Linux 图形系统 框架介绍 最全介绍 MiniGUI、QT5、EFL、GTK+(WebkitGtk、Midori)、DirectFB、Wayland
Windows环境下JDK安装与环境变量配置详细的图文教程
原文作者:souvc 博文出处:http://www.cnblogs.com/liuhongfeng/p/4177568.html
用户1518699
2020/09/16
18.1K0
Windows环境下JDK安装与环境变量配置详细的图文教程
编译LAVFilters
直接下载的地址http://xhmikosr.1f0.de/tools/ 且包含了yasm zlib等已经弄好了。-j8也可以用了,pkg-config都有了。真好。如果不嫌弃麻烦或不怕出现问题本着了解的目的可以自定义安装如下所示。
全栈程序员站长
2022/08/31
2.1K0
将c语言文件打包成exe可执行程序
如何将编写的c语言程序打包成exe可执行文件呢? 以前我们写程序很多是在编辑器上,让编辑起来编译运行我们的程序。如果想将其打包成exe可执行文件该如何做?
兰舟千帆
2022/07/16
3.2K0
将c语言文件打包成exe可执行程序
code blocks使用方法总结「建议收藏」
tips:同一个版本有多个安装文件,官网上有对于各个文件的简要介绍。最好选择 mingw-setup 。
全栈程序员站长
2022/09/20
2.6K0
推荐阅读
相关推荐
Linux 下从头再走 GTK+-3.0 (一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档