mysql中transaction的实现
但是要想在程序中实现事务,要求数据库本身支持事务。
现在的关系型数据库,我们日常使用的mysql,oracle等等都支持事务,有的是安装后直接就支持,有的需要做一些设置。这里我就自己的经历总结了一下如何设置以及设置的步骤:
+----+--------+--------------+--------+-------+--------+
| ID | name | address | salary | grade | sex |
+----+--------+--------------+--------+-------+--------+
| 1 | jason | shenzhen | 4500 | 6 | male |
| 2 | linkle | zhuhai | 4000 | 5 | female |
| 3 | leo | zhuhai | 3000 | 4 | male |
| 5 | steven | zhuhai_jinan | 5600 | 7 | male |
| 6 | jacky | zhuhai | 4000 | 5 | male |
+----+--------+--------------+--------+-------+--------+
5 rows in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 0 rows affected, 1 warning (0.00 sec)
+----+--------+--------------+--------+-------+--------+
| ID | name | address | salary | grade | sex |
+----+--------+--------------+--------+-------+--------+
| 1 | jason | shenzhen | 4500 | 6 | male |
| 2 | linkle | zhuhai | 4000 | 5 | female |
| 3 | leo | zhuhai | 3000 | 4 | male |
| 5 | steven | zhuhai_jinan | 5600 | 7 | male |
| 6 | jacky | zhuhai | 4000 | 5 | male |
| 7 | jack | HongKong | 8000 | 10 | male |
+----+--------+--------------+--------+-------+--------+
6 rows in set (0.00 sec)
接下来就需要进行配置:
如何查看表的状态呢?
Database changed
mysql> show table status;
+--------+--------+---------+------------+--------+------+----------+------
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+--------+--------+-------------------+----------+----------------+---------+
| dept | MyISAM | 10 | Fixed | 3 | 59 | 177 | 16607023625928703 | 2048 | 0 | NULL | 2009-06-06 10:23:30 | 2009-06-06 12:18:02 | NULL | latin1_swedish_ci | NULL | | |
| tem_tb | MyISAM | 10 | Fixed | 3 | 73 | 219 | 20547673299877887 | 2048 | 0 | NULL | 2009-06-05 16:18:49 | 2009-06-05 16:47:01 | NULL | latin1_swedish_ci | NULL | | |
| temp | MyISAM | 10 | Fixed | 4 | 68 | 272 | 19140298416324607 | 2048 | 0 | NULL | 2009-06-05 16:18:49 | 2009-06-05 16:18:49 | NULL | latin1_swedish_ci | NULL | | |
| tester | MyISAM | 10 | Fixed | 6 | 73 | 438 | 20547673299877887 | 5120 | 0 | NULL | 2009-06-06 14:50:47 | 2009-06-06 14:52:12 | NULL | latin1_swedish_ci | NULL | | |
+--------+--------+---------+------------+------+----------------+---------
2.配置
安装后,可以对innodb做一些配置,在my.cnf或my.ini中的[mysqld]段。
#存储目录,如果不指定默认为安装的data目录,为空时以innodb_data_file_path指定路径为准
innodb_data_home_dir =
#数据文件名及大小,默认为ibdata1,10m大小。autoextend可以自增,max:2000M文件最大2g,因为有的硬盘有2g文件大小限制。
innodb_data_file_path = ibdata1:2000M;ibdata2:2000M:autoextend:max:2000M
# 设置缓冲池大小
set-variable = innodb_buffer_pool_size=70M
set-variable = innodb_additional_mem_pool_size=10M
#设置日志文件路径,默认在date目录下,名称为ib_logfile...
innodb_log_group_home_dir =
#设置日志文件数目,默认为3
set-variable = innodb_log_files_in_group=3
# 设置日志文件大小
set-variable = innodb_log_file_size=10M
# 设置日志缓冲大小
set-variable = innodb_log_buffer_size=8M
# 任何事务提交前写入日志,方便故障诊断,请设为1。如果丢失最近的几个事务影响不大的话,设置为0(默认值)。
innodb_flush_log_at_trx_commit=1
#设置超时时间
set-variable = innodb_lock_wait_timeout=50
注意:1.innodb不会自动生成目录,上面所有指定目录要手工生成,默认不用。
2.在/etc下面默认没有my.cnf文件,需要copy,如下:
[root@test-server root]# find / -name 'my*.cnf'
/etc/my.cnf
/usr/share/doc/packages/MySQL-server/my-huge.cnf
/usr/share/doc/packages/MySQL-server/my-innodb-heavy-4G.cnf
/usr/share/doc/packages/MySQL-server/my-large.cnf
/usr/share/doc/packages/MySQL-server/my-medium.cnf
/usr/share/doc/packages/MySQL-server/my-small.cnf
/usr/share/mysql/my-large.cnf
/usr/share/mysql/my-huge.cnf
/usr/share/mysql/my-innodb-heavy-4G.cnf
/usr/share/mysql/my-medium.cnf
/usr/share/mysql/my-small.cnf
在/usr/share/mysql目录下有5个my*.cnf文件,打开查看根据自己配置情况选择一个,执行#cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
这时候,就可以进行上面的配置啦!
3.添加表
mysql> create table testerinfo(ID int primary key, name char(30), address char(30), sex char(10)) type=innodb;
Query OK, 0 rows affected, 1 warning (0.02 sec) //设置表的engine
这里出现一个warning,我们查看warning内容:
mysql> show warnings;
+---------+------+-----------------------------------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------------------------------+
| Warning | 1287 | 'TYPE=storage_engine' is deprecated; use 'ENGINE=storage_engine' instead |
+---------+------+-------------------------------------------------------------+
1 row in set (0.00 sec)
意思是应设置engin=innodb,而不是type。没有关系,下面我们修改:
mysql> alter table testerinfo engine='InnoDB';
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
没有出现警告提示,搞定!
mysql> show table status;
+------------+--------+---------+------------+------+----------+-------------+-----
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+------------+--------+---------+------------+------+----------------+-------------+
| dept | MyISAM | 10 | Fixed | 3 | 59 | 177 | 16607023625928703 | 2048 | 0 | NULL | 2009-06-06 10:23:30 | 2009-06-06 12:18:02 | NULL | latin1_swedish_ci | NULL | | |
| tem_tb | MyISAM | 10 | Fixed | 3 | 73 | 219 | 20547673299877887 | 2048 | 0 | NULL | 2009-06-05 16:18:49 | 2009-06-05 16:47:01 | NULL | latin1_swedish_ci | NULL | | |
| temp | MyISAM | 10 | Fixed | 4 | 68 | 272 | 19140298416324607 | 2048 | 0 | NULL | 2009-06-05 16:18:49 | 2009-06-05 16:18:49 | NULL | latin1_swedish_ci | NULL | | |
| tester | MyISAM | 10 | Fixed | 6 | 73 | 438 | 20547673299877887 | 5120 | 0 | NULL | 2009-06-06 14:50:47 | 2009-06-06 14:52:12 | NULL | latin1_swedish_ci | NULL | | |
| testerinfo | InnoDB | 10 | Compact | 0 | 0 | 16384 | 0 | 0 | 0 | NULL | 2009-06-06 15:23:23 | NULL | NULL | latin1_swedish_ci | NULL | | InnoDB free: 4096 kB |
+------------+--------+---------+------------+------+----------------+-----+
5 rows in set (0.06 sec)
4.试验
mysql> select * from testerinfo;
Empty set (0.00 sec)
mysql> desc testerinfo;
+---------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| ID | int(11) | NO | PRI | | |
| name | char(30) | YES | | NULL | |
| address | char(30) | YES | | NULL | |
| sex | char(10) | YES | | NULL | |
+---------+----------+------+-----+---------+-------+
4 rows in set (0.01 sec)
mysql> insert into testerinfo values(1,'jason','shenzhen','male');
Query OK, 1 row affected (0.01 sec)
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into testerinfo values(2,'tina','zhuhai','female');
Query OK, 1 row affected (0.00 sec)
mysql> select * from testerinfo;
+----+-------+----------+--------+
| ID | name | address | sex |
+----+-------+----------+--------+
| 1 | jason | shenzhen | male |
| 2 | tina | zhuhai | female |
+----+-------+----------+--------+
2 rows in set (0.00 sec)
mysql> insert into testerinfo values(5,'john','zhuhai','male');
Query OK, 1 row affected (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from testerinfo;
+----+-------+----------+------+
| ID | name | address | sex |
+----+-------+----------+------+
| 1 | jason | shenzhen | male |
+----+-------+----------+------+
1 row in set (0.00 sec)
很高兴,设置成功!接下来大家就可以进行事务处理啦!
mysql中transaction的实现相关推荐
- mysql isreg_`Innodb` MySQL中如何优雅的删除大表跑路
最近很想写写MySQL相关的内容,就从这个话题出发吧 有人说删MySQL表谁不会 不就是 drop table TABLENAME 如果在生产环境中,你对一张TB级别的大表,敲下这行命令 那么你的主管 ...
- mysql中的意向锁IS,IX
知识储备: 1.官方文档上说mysql是支持非锁定读的:这个功能是这样实现的,如果事务a 要对行的数据进行更新的话,那么事务a要得到行的x锁,并把这一行 之前的样子记录在undo log里面,这样一 ...
- mysql 超时异常_java.sql.SQLException:超出锁定等待超时;尝试在MYSQL中重启事务异常...
我在MYSQL中使用一个表名"test",它在事务T1期间锁定,在20分钟内完成.当我在这20分钟内通过另一个事务T2更新这个表时.我收到一个例外: - 11:58:38,584 ...
- mysql中以下正确的sql是_总结MySQL中SQL语法的使用
--where子句操作符: where子句操作符 = 等于 <> 不等于(标准语法) != 不等于(非标准语法,可移植性差) < 小于 <= 小于等于 > 大于 > ...
- mysql中删除同一行会经常出现死锁?太可怕了
之前有一个同事问到我,为什么多个线程同时去做删除同一行数据的操作,老是报死锁,在线上已经出现好多次了,我问了他几个问题: 1. 是不是在一个事务中做了好几件事情? 答:不是,只做一个删除操作,自动提交 ...
- MySQL中如何关闭事务的自动提交
关闭MySQL的事务自动提交 在mysql中,默认情况下,事务是自动提交的,也就是说只要执行一条DML语句就开启了事务,并且提交了事务:(也称之为"一行一提交"): Start t ...
- mysql 事物的持久性是指_详解MySQL中事务的持久性实现原理
前言 说到数据库事务,大家脑子里一定很容易蹦出一堆事务的相关知识,如事务的ACID特性,隔离级别,解决的问题(脏读,不可重复读,幻读)等等,但是可能很少有人真正的清楚事务的这些特性又是怎么实现的,为什 ...
- mysql中存储引擎是啥_mysql中的存储引擎
mysql存储引擎概述 什么是存储引擎? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力. ...
- mysql中整理设置__MySQL整理
登录 命令:mysql -h [IP 地址/域名] -P [端口] -u [用户名] -p[密码] 端口默认是3306 mysql -hlocalhost -uroot -p 断开 exit; \q; ...
最新文章
- empt注意事项 php_PHP编程注意事项
- 预编译头超出上限错误 就是include比较多
- linux查看发起ddos攻击的ip,在Linux上使用netstat命令查证DDOS攻击的方法
- JVM类加载理解(线程上下文类加载器、Tomcat类加载器)
- react月份选择控件_看我的案例:用react写一个日历控件!
- 专访华为杨海松:立足合作伙伴价值,构建健康HarmonyOS生态
- CentOS 8源码安装Zabbix5.0
- 戴尔T630安装Ubuntu操作系统及Gaussian 09
- 2021 年 五一数学建模比赛 B 题(第四问至第六问)
- Word批量替换勾选框
- python爬虫脚本 初级入门爬虫英雄联盟所有皮肤_Python爬虫实战,60行代码爬取英雄联盟全英雄全皮肤,找寻曾今那些被删除的绝版皮肤...
- 电脑测试软件 免安装,Keyboard Test Utility:电脑必备键盘测试软件,小体积、免安装...
- 代理服务器CCProxy基本设置
- 美国大学计算机专业排名2014,2014年美国大学计算机专业排名
- 循环 计算机英语,计算机英语词汇解释
- Hive left semi join ,select 和 where中不能出现右表字段/不会生成笛卡尔积
- 《java并发编程实战》第11章-性能与可伸缩性
- LayUI时间线优化
- android简单星座查询,简单的星座查询
- 关于titanic数据集(一)
热门文章
- 注释参数opengl的surfaceview使用findViewById返回null问题解决
- Windows 2003 Server 设置技巧
- mysql布隆过滤器源码_通过实例解析布隆过滤器工作原理及实例
- python操作文件open_python:open/文件操作
- type=file的未选择任何文件修改_PDF文件怎样输入到CAD图纸中?懂得这个功能可以快速实现...
- java虚拟机内存比例,【Java虚拟机】堆内存分配策略总结
- android下载后的app自动安装,Android 7.0 下载APK后自动安装
- 在云中利用开源软件进行开发以提高创新能力
- Linux命令-Sed用法教程
- spi协议时序图和四种模式实际应用详解