作者:泥瓦匠 今天群里面讨论,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. 作业七:团队项目——Alpha版本冲刺阶段

      本次作业为期三周时间,要求各组结合所选项目并阅读教材<构建之法>第六章内容,完成项目的Alpha版本.本阶段的主要内容如下:(20分) 1. 每天组织一次站立会议,讨论每个成员的昨天进 ...

  2. BugTracker 加入发Mail的功能

    BugTracker部署好之后,发现增加bug不能mail提醒.于是补上这个功能记录在此,方法是次要的,主要是找到地方.需要3步.吐槽下Asp的代码风格看的真心蛋疼.... 一.发送mail(主要是找 ...

  3. 带你看懂Dictionary的内部实现

    了解Dictionary的开发人员都了解,和List相比,字典添加会慢,但是查找会比较快,那么Dictionary是如何实现的呢? Dictionary的构造 下面的代码我看看Dictionary在构 ...

  4. C/C++文件操作2

    一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下: typedef struct { int level; /* fill/empty level of ...

  5. 汇编语言hello world

    DOS下: ;栈段 stack segment stack db dup(?) stack ends ;数据段 data segment szHello db 'Hello,world',0dh,0a ...

  6. spring-mvc.xml报错cvc-complex-type.2.4.c

    添加 <!-- 定义请求处理映射HandlerMapping --> <bean id = "handlerMapping" class = "org. ...

  7. Javascript之document对象用法(很重要)

    一.找到元素 document.getElementById("id"):根据id找层,最多找一个 var a=document.getElementById("id&q ...

  8. SQL order by的用法

    首先,order by是用来写在where之后,给多个字段来排序的一个DQL查询语句. 其次,order by写法: 1.  select 字段列表/* from 表名 where 条件 order ...

  9. textarea内部换行实现

    当在使用textarea的时候,有一次需求,需要做到自定义换行,而不是通过textarea定宽来自动换行,其实在html中可以直接通过<br/>来换行,同时也想到用\n来实现换行,其结果是 ...

  10. javascript设计模式与开发实践阅读笔记(7)——迭代器模式

    迭代器模式:指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示. 迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺 ...