昨天週一,將項目移交測試人員,下午時候測試人員告訴我了一個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`);