1 创建一张表,要求包含:主键约束,非空约束,唯一约束;然后插入数据测试3中约束的特点(截图展示结果)
create table ZYX(
eid int primary key auto_increment , #主键约束
ename varchar(20) UNIQUE, #唯一约束
sex char(2) NOT NULL #非空约束
);
(1)主键约束:唯一且非空 一个表中只能有一个主键
(2)非空约束:字段的值不能为null, 可以重复 ,一个表中也可以有多个 非空约束
(3)唯一约束:字段的值可以为null, 不可以重复 ,一个表中也可以有多个 唯一约束
2 使用转账案例,或者其他案例,模拟演示脏读,不可重复读,幻读,并给出解决方案(幻读除外),截图展示结果。
(1)模拟脏读:一个事务读取到了另一个事务中尚未提交的数据
解决方法:将全局的隔离级别进行提升为: read committed
set global transaction isolation level read committed;
(2)不可能重复读:一个事务中两次读取的数据内容不一致, 要求的是在一个事务中多次读取时数据是一致的. 这是进行 update 操作时引发的问题
解决方法:将全局的隔离级别进行提升为: repeatable read
set global transaction isolation level repeatable read;
(3)幻读:select 某记录是否存在,不存在,准备插入此记录,但执行 insert 时发现此记录已存在,无法插入,此时就发生了幻读。
解决办法:将事务隔离级别设置到最高 SERIALIZABLE ,以挡住幻读的发生
set global transaction isolation level SERIALIZABLE;
serializable 串行化可以彻底解决幻读,但是 事务只能排队执行,严重影响效率, 数据库不会使 用这种隔离级别