作者:泥瓦匠 今天群里面讨论,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. Redis使用总结之与Memcached异同

    Redis是什么?两句话可以做下概括: 1. 是一个完全开源免费的key-value内存数据库 2. 通常被认为是一个数据结构服务器,主要是因为其有着丰富的数据结构 strings.map. list ...

  2. 基于 IdentityServer3 实现 OAuth 2.0 授权服务数据持久化

    最近花了一点时间,阅读了IdentityServer的源码,大致了解项目整体的抽象思维.面向对象的重要性; 生产环境如果要使用 IdentityServer3 ,主要涉及授权服务,资源服务的部署负载的 ...

  3. Mac OS X上尝试编译CoreCLR源代码

    CoreCLR登陆GitHub之后,体验CoreCLR首当其冲的方式就是在自己的电脑上编译它,昨天分别在Windows与Linux上成功编译了CoreCLR,详见: 1)Windows上成功编译Cor ...

  4. 享受LINQ:判断一组文字是否在字符串中同时出现的最简单方法

    需求是这样的:不允许在一个字符串中同时出现"博", "客", "园", "团", "队"这5个文字. ...

  5. PHP合成图片、生成文字、居中对齐、画线、矩形、三角形、多边形、图片抗锯齿、不失真 高性能源码示例

    function generateImg($source, $text1, $text2, $text3, $font = './msyhbd.ttf') { $date = '' . date ( ...

  6. eclipse导入Android项目后,项目的名称变为了主Activity的名称

    不要使用File -> Import -> Android -> Existing Android Code into Workspace,而是用 File -> Import ...

  7. Hibernate关联映射(转载)

    原文:http://www.cnblogs.com/huxi/archive/2009/12/15/1624988.html 以简单的两个类为例: User(int id, String name)  ...

  8. 彻底掌握this,call,apply

    说起js里面比较头疼的知识点,this的指向,call与apply的理解这三者肯定算的上前几,好的js开发者这是必须迈过的槛.今天就总结下这三者紧密相连的关系. 首先推荐理解call的用法 Funct ...

  9. [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍

    前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...

  10. 你应该知道的RPC原理

    你应该知道的RPC原理 在学校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 而一旦踏入公司尤其是大型互 ...