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

1. DDL - Data Definition Language

数据库定义语言:定义数据库的结构。 其主要命令有CREATE,ALTER,DROP等,下面用例子详解。该语言不需要commit,因此慎重。 CREATE - to create objects in the database   在数据库创建对象

例:CREATE DATABASE test; // 创建一个名为test的数据库

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

例:ALTER TABLE test ADD birthday date; // 修改test表,新增date类型的birthday列

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

例: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

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数据库事务回滚:

/**
* 描述: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数据库事务回滚,回滚到特定的保存点:

/**
* 描述: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   最后来张图总结: 如以上文章或链接对你有帮助的话,别忘了分享到朋友圈,让更多的人阅读这篇文章。

数据库必会必知 之 SQL四种语言:DDL DML DCL TCL的更多相关文章

  1. SQL中的四种语言DDL,DML,DCL,TCL

    1.DDL(Data Definition Language)数据库定义语言statements are used to define the database structure or schema ...

  2. SQL 的四种分类 DDL,DML,DCL,TCL

    DDL (数据定义问题) 数据定义语言 - Data Definition Language 用来定义数据库的对象,如数据表.视图.索引等DDL不需要commit.CREATEALTERDROPTRU ...

  3. SQL语言DDL DML DCL TCL四种语言

    1.DDL(Data Definition Language)数据库定义语言:DDL使我们有能力创建或删 除表格.可以定义索引(键),规定表之间的链接,以及施加表间的 约束. • 常见DDL 语句: ...

  4. 数据库必会必知 之 SQL四种语言:DDL DML DCL TCL(转)

    今天群里面讨论,DDL 还是 DML,我这种小白还是总结下他们的区别吧. 1. DDL – Data Definition Language 数据库定义语言:定义数据库的结构. 其主要命令有CREAT ...

  5. SQL四种语言:DDL,DML,DCL,TCL

    1.DDL(Data Definition Language)数据库定义语言statements are used to define the database structure or schema ...

  6. 数据库的四种语言(DDL、DML、DCL、TCL)

    1.DDL (Data Definition Language )数据库定义语言 statements are used to define the database structure or sch ...

  7. SQL四种语言

    1.DDL(Data Definition Language)数据库定义语言statements are used to define the database structure or schema ...

  8. SQL四种语言:DDL,DML,DCL,TCL 的区别

    1.DDL(Data Definition Language)数据库定义语言statements are used to define the database structure or schema ...

  9. SQL 四大功能DDL/DML/DCL/TCL

    SQL主要分成四部分:(1)数据定义.(SQL DDL)用于定义SQL模式.基本表.视图和索引的创建和撤消操作.(2)数据操纵.(SQL DML)数据操纵分成数据查询和数据更新两类.数据更新又分成插入 ...

随机推荐

  1. 基于OWIN ASP.NET WebAPI 使用OAUTH2授权服务的几点优化

    前面在ASP.NET WEBAPI中集成了Client Credentials Grant与Resource Owner Password Credentials Grant两种OAUTH2模式,今天 ...

  2. 消灭ASP.NET CachedPathData.ValidatePath引起的HttpException异常

    在博客程序的日志中经常会出现这样的错误日志: Url: http://www.cnblogs.com/cmt/p/sokcet_memory_leak.html (这个URL仅是示例)UserAgen ...

  3. 调研一类软件的发展演变—聊天软件( 1000-2000 words, in Chinese)

    因为本人平时对聊天软件的涉及比周边其他同学而言所涉及的是比较多的.所以说想写写这个东西.(ps本文里面的具体通讯信息的时间安排不分先后) 也许最起初的通讯信息的传达是利用.烽火狼烟这一类可以远距离视觉 ...

  4. [游戏模版20] Win32 物理引擎 加速运动

    >_<:Compared with previous talk,there will be taking about how to create an accelerated speed. ...

  5. [BTS] Action demo In BizTalk WCF-SAP Adapter

    I use following xml config in BizTalk 2010 WCF-SAP adapter. <BtsActionMapping xmlns:xsi="htt ...

  6. JQuery高性能优化

    使用JQuery时,你可以使用多种选择器,选择同一个元素,各种方法之间的性能是不一样的,有时候差异会特别大. 通常比较常用的选择器有以下几个: ID选择器 $("#id") 标签选 ...

  7. jQuery演示10种不同的切换图片列表动画效果以及tab动画演示 2

    很常用的一款特效纯CSS完成tab实现5种不同切换对应内容效果 实例预览 下载地址 实例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...

  8. Bootstrap的学习以及简单运用

    <!DOCTYPE html> <html> <head> <title>柠檬学院</title> <meta charset=&qu ...

  9. js系列(9)js的运用(一)

        本节开始介绍javascript在html页面中的运用.     (1)link样式表的动态绑定:(http://files.cnblogs.com/files/MenAngel/text04 ...

  10. 深入学习系列--Data Structure--02字符串

    字符串可以说是我们实际工作中使用最多的数据类型了,常见的字符串操作包括链接.取子串.格式化等.这部分内容总体来说比较容易理解,最难的部分要数字符串的模式匹配方法了,尤其是KMP算法,需要通过实践加以记 ...