mysql什么引擎支持事务_让Mysql支持事务处理(修改数据库的存储引擎类型)

有时我们发现我们的Mysql数据库使用事务时无效,这很有可能是数据库使用的存储引擎(storage engine)不支持事务处理。比如创建数据库时的默认存储引擎“MyISAM”,它是性能优先的存储引擎,不支持事务处理。这时我们可以按下面步骤处理,解决MySQL不支持事务的问题。

一、查看数据库的存储引擎:

1、查看MySQL系统当前使用的存储引擎:

使用SQL“show variables like '%storage_engine%';”命令,可以查看MySQL系统当前使用的存储引擎:MariaDB [aiezu]> show variables like '%storage_engine%';

+------------------------+--------+

| Variable_name | Value |

+------------------------+--------+

| default_storage_engine | MyISAM |

| storage_engine | MyISAM |

+------------------------+--------+

2 rows in set (0.01 sec)

2、查看指定数据库所有表使用的存储引擎:

使用“show table status from aiezu;”命令,可以查看指定数据库所有表使用的存储引擎,其中“aiezu”为数据库名。

3、查看指定表的存储引擎:MariaDB [aiezu]> show create table test;

+-------+---------------------------------------------------------+

| Table | Create Table |

+-------+---------------------------------------------------------+

| test | CREATE TABLE `test` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`name` varchar(36) NOT NULL DEFAULT '',

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8

+-------+----------------------------------------------------------+

1 row in set (0.00 sec)

二、查看当前数据库系统支持的引擎:

使用show engines;命令可以查看当前数据库支持的引擎:

bd5e3c145b0c7b3573f6020b5655f50b.png

可以看出,笔者用的MariaDB-5.5.47,支持10种存储引擎,而这10种存储引擎中,只有“InnoDB”、“FEDERATED” 这两种存储引擎支持事务处理。

三、修改数据库存储引擎:

1、修改整个系统创建数据表时的默认存储引擎:

要让以后新建的数据表,默认使用支持事务处理的“InnoDB”做为默认存储引擎,修改“/etc/my.conf”文件,在“[mysqld]”下添加一行“default-storage-engine=InnoDB”,然后重启数据库即可:[mysqld]

...省略N行,爱E族 aiezu.com ...

default-storage-engine=InnoDB

2、修改已有数据表的存储引擎:

要将已有的数据表,修改为使用“InnoDB”作为默认存储引擎,通过“alter table”命令:

低版本:mysql> alter table test type=INNODB;

Query OK, 0 rows affected, 1 warning (0.04 sec)

Records: 0 Duplicates: 0 Warnings: 0高版本:MariaDB [aiezu]> alter table test ENGINE=INNODB;

Query OK, 0 rows affected (0.01 sec)

Records: 0 Duplicates: 0 Warnings: 0

四、测试MySQL事务处理:

MySQL使用BEGIN(或START TRANSACTION)、COMMIT、ROLLBACK三命令分别代表开始一个事务、提交事务、回滚事务,事务简单的流程如下:--回滚的事务

BEGIN;

-- 事务要执行的操作,update、delete等..

ROLLBACK;

--提交的事务

BEGIN;

-- 事务要执行的操作,update、delete等..

COMMIT;

事务的简单例子:MariaDB [aiezu]> truncate table test;

Query OK, 0 rows affected (0.00 sec)

MariaDB [aiezu]> BEGIN;

Query OK, 0 rows affected (0.00 sec)

MariaDB [aiezu]> insert test(name,url) values('天猫','tmall.com');

Query OK, 1 row affected (0.00 sec)

MariaDB [aiezu]> ROLLBACK;

Query OK, 0 rows affected (0.00 sec)

MariaDB [aiezu]> insert test(name,url) values('爱E族','aiezu.com');

Query OK, 1 row affected (0.01 sec)

MariaDB [aiezu]> select * from test;

+----+---------+-----------+

| id | name | url |

+----+---------+-----------+

| 2 | 爱E族 | aiezu.com |

+----+---------+-----------+

1 row in set (0.00 sec)  上面可以看出,插入的站点“天猫”,由于在事务里,事务被回滚,所以插入被撤销。但是它的“id:1”已经被其占用,所以后面成功插入的站点“爱E族”使用的ID是“2”。

五、常见错误:

错误一:ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'type=innodb' at line 1解决方法:

这个错误是当前MySQL版本不支持type方式设置存储引擎的,将type关键词改成ENGINE 即可。alter table test type=INNODB; --低版本

alter table test ENGINE=INNODB; --高版本

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值