MYSQL常见概念一: 事务

本文介绍了数据库事务的概念及其四大特性:原子性、一致性、隔离性和持久性,并探讨了事务并发问题如脏读、幻读和不可重复读。同时,提供了不同隔离级别的对比及MySQL中实现事务的引擎示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  定义: 简而言之是一个sql或者是多个sql的操作集,在执行过程中,要么都成功,要么都失败

  特点 : 事务有四大特性: 原子性  (整个事务包含的sql要么都执行成功,要么都失败)

                                          一致性 (数据库在事务执行前与执行后是一致的,数据能够对的上

                                          隔离性 (多个事务之间不相互影 响)

                                          持久性  (事务一旦完成,对数据库的影响是持久性的,不会因为数据库故障丢失事务)

   事务并发问题:    脏读:   一个事务A读取了另一个事务B未提交的数据,事务B回滚,会造成A读了额外的数据(脏数据)

                               幻读:  事务A查数据库,发现没有该记录,于是插入该记录,结果事务B早一步插入,感觉事务A是在幻读

                              不可重复读: 事务A多次查询数据库,事务B在多次查询过程更改了数据表,造成事务A多次读取结果不一致

   事务隔离锁级别:  

 事务隔离级别脏读            不可重复读    幻读           
 read-uncommitted允许允许允许
 read-committed不允许允许允许
 repeatable-read不允许不允许允许
 serializable不允许不允许不允许

   其他:    mysql中实现了事务的引擎有: innodb , bdb

   事务sql实例:

 建表:

CREATE TABLE `users` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `pass` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT '2018-01-01 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `institution_users` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `institution_id` int(11) unsigned,
  `user_id` int(11) unsigned,
  `created_at` timestamp NOT NULL DEFAULT '2018-01-01 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;



事务插入数据:

BEGIN;
INSERT INTO users(name,pass,created_at) VALUES('test_user','123456',NOW());
set @my = (select last_insert_id() as user_id);
INSERT INTO institution_users(institution_id,user_id,created_at) VALUES(170,@my,NOW());
COMMIT;
-- 如果报错,手动rollback
-- ROLLBACK;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值