数据库 | 触发器 存储过程 并发控制

数据库 | 触发器 存储过程 并发控制,第1张

数据库 | 触发器 存储过程 并发控制

没有在前端实现。

触发器

例:密码长度大于6

CREATE DEFINER = `root`@`%` TRIGGER `password` BEFORE UPDATe ON `Untitled` FOR EACH ROW BEGIN
	IF length(NEW.upwd) < 6
	THEN
		DELETE FROM users WHERe upwd=new.upwd;
	END IF;
END;

存储过程

例:更新密码

CREATE DEFINER=`root`@`%` PROCEDURE `update_user`(
in `uunam` varchar(20),
in `uupwd` varchar(10)
)
BEGIN
	update users set upwd = uupwd where unam = uunam;
END


或者在Navicat中

并发控制

四种隔离级别,它们分别在不同的程度上为并发 *** 作的正确调度提供一定的保证:

(1)读未提交(Read Uncommitted);

(2)读提交(Read Committed, RC);

(3)可重复读(Repeated Read, RR);mysql 默认使用级别。

(4)串行化(Serializable);

并发问题:

  1. 脏读
    脏读指的是读到了其他事务未提交的数据(这些数据可能会回滚,也就是可能最终不会存到数据库中)。
  2. 不可重复读
    对指的是在同一事务内,不同的时刻读到的同一批数据可能是不一样的,可能会受到其他事务的影响,比如其他事务改了这批数据并提交了。通常针对数据更新(UPDATE) *** 作。
  3. 可重复读
    可重复读指的是在一个事务内,最开始读到的数据和事务结束前的任意时刻读到的同一批数据都是一致的。通常针对数据更新(UPDATE) *** 作。
  4. 幻读
    幻读是针对数据插入(INSERT) *** 作来说的,当同一个查询在不同时间生成不同的行集合时就是出现了幻读。本质上是由于数据插入(INSERT) *** 作,使得已提交事务B对事务A产生了数据不一致的影响。
实验准备

打开两个线程,设置读未提交,并取消自动提交功能:

set autocommit = 0;
实验

1、脏读


2、幻读

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5660536.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存