作者:泥瓦匠 今天群里面讨论,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规范中最让人费解的地方

    OWIN defines a standard interface between .NET web servers and web applications. OWIN最让人费解不是OWIN的五大角 ...

  2. LoadTest内存和线程Troubleshooting实战

    在端午节放假的三天中,我对正在开发的 Service 进行了 LoadTest,尝试在增大压力的条件下发现问题. 该 Service 为独立进程的 WCF 服务,宿主于 WindowsService, ...

  3. [C++] C\C++ printf 输出格式

    1.转换说明符      %a(%A)     浮点数.十六进制数字和p-(P-)记数法(C99)      %c         字符      %d         有符号十进制整数      % ...

  4. [JS] HTML QQ分享界面js代码

    @ - @ :可以自己指定分享内容等....内含JS脚本 <html> <head> <title></title> <script type=& ...

  5. [C++] socket -9[匿名管道]

    ::怎么弄都不能读取信息....先把代码放着.... #include<windows.h> #include<stdio.h> int main() { HANDLE rea ...

  6. Linux:目录&文件基本操作

    - 表示上一次所在目录,- 通常表示当前用户的"home"目录.使用 pwd 命令可以获取当前所在路径(绝对路径). 新建文件:touch test创建目录:mkdir -p fa ...

  7. fckeditor使用(转)

    fckeditor - (1)资料介绍与安装 fckeditor介绍  FCKeditor是一个专门使用在网页上属于开放源代码的所见即所得文字编辑器.  1.fckeditor官网:http://ww ...

  8. Web开发者的六个代码调试平台

    代码调试平台是Web开发者进行开发.测试.分享.协作和交流的网络应用,它们支持实时的编辑.预览HTML.CSS和JavaScript的客户端代码.这些代码调试平台最值得称道的地方在于,它们中的大多数都 ...

  9. 爱上MVC3~MVC+ZTree大数据异步树加载

    回到目录 理论部分: MVC+ZTree:指在.net MVC环境下进行开发,ZTree是一个jquery的树插件 大数据:一般我们系统中,有一些表结构属于树型的,如分类,地域,菜单,网站导航等等,而 ...

  10. 技巧~向URL地址添加参数

    只是个小技巧,感觉挺有用,拿出来分享一下 功能:在URL地址上添加参数,如果只有一个,会是?userid=1,需要是大于1个,会是&userid=1 实现: private string Ad ...