当前位置:首页>正文

MySql中的“事务”是什么有什么用 数据库mysql中大数据量处理的问题

2023-04-12 23:04:59 互联网 未知

MySql中的“事务”是什么?有什么用?

事务能保证你做的一系列动作,要么全部成功。如果有一个操作失败,就回退到修改前。 比如你要做下面几个操作, 1.删除表A中的某些记录 2.向B添加一些记录。 3.修改C表中的一些数据。 使用事务,如果1,2都成功了,3却失败了。就会回退到第1步执行前的样子,ABC表都没被修改。

数据库mysql中大数据量处理的问题

我最近刚整过和你类似的事情 呵呵。
你这个问题可以分成2个问题来解决
1.建立索引 首先把data_content_21.邮件, data_content_9.帐号建立索引。建立索引不会的话推荐你一个绿色工具 HAP_SQLyog_Enterprise_7.14网上自己去下很多的,然后登录进去以后选择你的表右键-》建立索引-》选上你要建立索引的字段就好了
2.mysql毕竟是轻量级数据库,如果数据超过100万条,建议你使用mysql的分表机制,需要mysql5.4.1以上的版本,分表机制在那个绿色工具里也有 自己试下吧

mysql怎么处理大数据

我们经常会遇到操作一张大表,发现操作时间过长或影响在线业务了,想要回退大表操作的场景。在我们停止大表操作之后,等待回滚是一个很漫长的过程,尽管你可能对知道一些缩短时间的方法,处于对生产环境数据完整性的敬畏,也会选择不做介入。最终选择不作为的原因大多源于对操作影响的不确定性。实践出真知,下面针对两种主要提升事务回滚速度的方式进行验证,一种是提升操作可用内存空间,一种是通过停实例,禁用 redo 回滚方式进行进行验证。

仔细阅读过官方手册的同学,一定留意到了对于提升大事务回滚效率,官方提供了两种方法:一是增加 innodb_buffer_pool_size 参数大小,二是合理利用 innodb_force_recovery=3 参数,跳过事务回滚过程。第一种方式比较温和,innodb_buffer_pool_size 参数是可以动态调整的,可行性也较高。第二种方式相较之下较暴力,但效果较好。

两种方式各有自己的优点,第一种方式对线上业务系统影响较小,不会中断在线业务。第二种方式效果更显著,会短暂影响业务连续,回滚所有没有提交的事务。

Mysql中的事务是什么如何使用

什么是事务?

事务是逻辑上的一组操作,组成这组操作的各个单元,要不全都成功要不全都失败,这个特性就是事务

注意:mysql数据支持事务,但是要求必须是innoDB存储引擎

解决这个问题:

mysql的事务解决这个问题,因为mysql的事务特性,要求这组操作,要不全都成功,要不全都失败,这样就避免了某个操作成功某个操作失败。利于数据的安全

如何使用:

(1)在执行sql语句之前,我们要开启事务 start transaction

(2)正常执行我们的sql语句

(3)当sql语句执行完毕,存在两种情况:

1,全都成功,我们要将sql语句对数据库造成的影响提交到数据库中,committ

2,某些sql语句失败,我们执行rollback(回滚),将对数据库操作赶紧撤销

(注意:mysql数据支持事务,但是要求必须是innoDB存储引擎)
mysql> create table bank(name varchar(20),money decimal(5,1))engine=innodb defau
lt charset=utf8

mysql> inset into bank values(shaotuo,1000),(laohu,5000)

mysql> select*from bank
--------- --------
| name | money |
--------- --------
| shaotuo | 1000.0 |
| laohu | 5000.0 |
--------- --------

------没有成功“回滚”执行rollback
mysql> start transaction //开启事务
Query OK, 0 rows affected (0.00 sec)

mysql> update bank set money=money 500 where name=shaotuo
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> update bank set moey=money-500 where name=laohu
ERROR 1054 (42S22): Unknown column moey in field list
mysql> rollback //只要有一个不成功,执行rollback操作
Query OK, 0 rows affected (0.01 sec)

mysql> select*from bank
--------- --------
| name | money |
--------- --------
| shaotuo | 1000.0 |
| laohu | 5000.0 |
--------- --------
------成功之后 进行commit操作
mysql> start transaction //开启事务
Query OK, 0 rows affected (0.00 sec)

mysql> update bank set money=money 500 where name=shaotuo
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> update bank set money=money-500 where name=laohu
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> commit //两个都成功后执行commit(只要不执行commit,sql语句不会对真实的数据库造成影响)
Query OK, 0 rows affected (0.05 sec)

mysql> select*from bank
--------- --------
| name | money |
--------- --------
| shaotuo | 1500.0 |
| laohu | 4500.0 |
--------- --------