昨天周一,将项目移交测试人员,下午时候测试人员告诉我了一个bug,
新建组☞输入组名☞点击确定
此时出现了卡顿现象,该弹窗没有消失,测试人员连续点了多次确定,造成的结果是当卡顿消失后,出现了好多同名的组。
但只有这一次卡顿,也无法再次测验,于是想到了一个模拟卡顿的方法:给数据库表加锁。
MySQL数据库,工具是navicat:
加锁语句:lock tables 表名 write; 这句话可以阻止向表里添加数据。
此时在页面连续点击确定后弹窗不会消失,可以连续点击。
然后解锁:unlock tables;
解锁完毕后,该表里会突然多出好几条相同名字的记录,此时,模拟成功。
问题出现原因:表上锁后,添加操作的第一条数据已经进入添加阶段,但是没法添加成功,后台代码还未运行到给页面做返回的结尾。此时第二条、第三条。数据依次进来,其状态和第一条类似,表解锁后,多条记录在很短的时间里完成添加操作,导致出现同名现象。
解决办法:给页面要显示的主要内容加上唯一约束。
唯一约束,该列可以有空数据,但是不能有重复的数据。
添加唯一约束方式:
1.创建表时:
CREATE TABLE t_user (
Id int(11) NOT NULL AUTO_INCREMENT, -- 自增
username varchar(18) NOT NULL unique, -- 唯一性约束
password varchar(18) NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=1018 DEFAULT CHARSET=gbk;
2.已经建好的表
alter table `t_user` add unique(`username`);