MYSQL DDL语句 与 DML 在一个事物中的问题。
2013-04-26 16:21
295 查看
一个事物中包括 添加数据(DML) 和 建表(DDL) 两个操作。当添加数据完成的时候,DDL语句报错,异常回滚。但是此时DML语句已经执行成功并提交。
疑惑DML语句为什么没有回滚。
因为是用的hibernate,所以开始怀疑hibernate的问题。后来细细研究了下,表示hibernate很无辜。
用MYSQL作了一些测试,如下:
set autocommit = 0;#开启手动提交事务 begin;#事物开始 INSERT INTO `employee` (`first_name`, `last_name`, `job_title`, `salary`) VALUES ('汉子', 'Gilbert', 'Software Architect', 8000);#向employee表添加数据,此表数据库中已存在的。 #重复创建employee表,此建表语句会报错 CREATE TABLE `employee` ( `id` int NOT NULL AUTO_INCREMENT, `first_name` varchar(100) NOT NULL, `last_name` varchar(100) NOT NULL, `job_title` varchar(100) DEFAULT NULL, `salary` double DEFAULT NULL, `notes` text, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ROLLBACK;#事物结束,回滚。 #为了更加明显突出问题,此处我用回滚。其实在这里无论提交回滚。数据已经添加成功
此时我怀疑DDL语句与DML语句不能处于同一事物,但是只是怀疑。
一系列查资料,但是并未出现一个明显的答案。所以这个问题并未完全弄明白。也求大神解释.....
但是,发现一个很重要的信息:
一些命令,当开始一个事物,在执行之前,MySQL会自动提交事物。这些命令就是DDL。
从上面理解到,DDL命令会单独开启一个事物,并且会提交之前的事物。所以在我建表的时候,DDL命令已经把我添加数据事物给提交了。
到我理解极限了,对mysql事物不太了解。
相关文章推荐
- MySQL 基础语句之 DML,DDL,DCL,TCL
- MySQL学习笔记--DQL、DML、DDL、TCL语句,约束(主键、外键)
- MySQL--- DDL、DML、DCL都包括那些语句?
- mysql 基础ddl语句 dml语句
- DDL,DML,DCL语句的区别(MYSQL)
- MySQL备注不熟悉的DML|DDL 语句
- MySQL 如何在一个语句中更新一个数值后返回该值 -- 自增长种子竞态问题处理
- MySQL的DDL语句、DML语句与DCL语句
- mysql一个事务中有DDL语句的binlog情况
- 详解MySQL---DDL语句、DML语句与DCL语句
- 在Hive中执行DDL之类的SQL语句时遇到的一个问题
- MySQL--- DDL、DML、DCL都包括那些语句?
- 关于MySQL 5.6 DDL阻塞DML的问题!
- MySQL的DDL语句、DML语句与DCL语句
- MySQL中的DDL语句,DML语句初步
- MYSQL常用DDL,DML语句及外键创建
- 关于mysql中一个分类排序的语句问题
- mysql 一个较特殊的问题:You can't specify target table 'wms_cabinet_form' for update in FROM clause
- delphi中使用sql语句加条件引用时值是一个整型变量的问题
- MySQL中的DDL,DML