构造测试数据之 MySQL 篇
作为一名测试工程师,我们经常会构造测试数据进行一些功能验证。为了暴露更多的问题,在测试数据的构造上,我们应该尽可能的构造不同类型字段的数据,且一张表的字段最好不低于 10 10 10 个。
对于 MySQL 数据库,字段类型主要是分为 数值类型、时间类型、字符串类型。
- 数值类型:
int
、bigint
、float
、double
、decimal
、… - 时间类型:
year
、month
、day
、date
、time
、datetime
、timestamp
、… - 字符串类型:
char
、varchar
、enum
、text
、…
-- 创建学生表
create table student_info (id int(11) not null auto_increment,stu_number int(11) not null unique comment '学号',name char(20) not null comment '姓名', age tinyint default 20 comment '年龄',sex enum('man', 'woman') comment '性别',address varchar(50) comment '家庭住址',score smallint comment '入学成绩',class_id int(11) comment '所在班级',birth_year year comment '出生年份',birthday date comment '出生日期',createTime datetime default current_timestamp comment '创建时间',updateTime timestamp default current_timestamp on update current_timestamp comment '更新时间',primary key (id)
);
我们创建一个学生信息表,有几点需要特别声明:
id
作为主键(Primary Key
),同时设置为自增(auto_increment
)。- 学号
stu_number
具有唯一约束(Unique Key
)。 name
为char
类型,address
为varchar
类型。sex
为枚举(enum
)类型。date
类型的格式为YYYY-MM-DD
。datetime
和timestamp
类型的格式都为YYYY-MM-DD hh:mm:ss
。datetime
支持的范围为1000-01-01 00:00:00
-9999-12-31 23:59:59
(通常用来考勤等)。timestamp
有时间范围限制,从1970-01-01 00:00:01
-2038-01-19 03:14:07
(常用)(通常使用在注册账号时间,交易,下订单时间)。
插入数据:
insert into student_info (stu_number, name, age, sex, address, score, class_id, birth_year, birthday, createTime, updateTime)
values (100001, '张三', 25, 'man', '北京市朝阳区', 80, 104, '1998', '1998-06-16', '2023-12-31 01:00:00', '2023-12-31 01:00:00'),(100002, '李四', 34, 'man', '北京市海淀区', 85, 102, '1997', '1997-03-12', '2023-12-31 01:00:00', '2023-12-31 01:00:00'),(100003, '王五', 18, 'man', '上海市徐汇区', 90, 103, '1998', '1998-03-25', '2023-12-31 01:00:00', '2023-12-31 01:00:00'),(100004, '赵六', 38, 'man', '上海市静安区', 70, 104, '1995', '1995-05-18', '2023-12-31 01:00:00', '2023-12-31 01:00:00'),(100005, '子涵', 45, 'man', '北京市朝阳区', 82, 101, '1997', '1997-08-11', '2023-12-31 01:00:00', '2023-12-31 01:00:00'),(100006, '小美', 22, 'woman', '上海市闵行区', 88, 102, '1996', '1996-10-10', '2023-12-31 01:00:00', '2023-12-31 01:00:00'),(100007, '小明', 65, 'man', '西安市未央区', 89, 103, '1997', '1997-01-28', '2023-12-31 01:00:00', '2023-12-31 01:00:00'),(100008, '小红', 51, 'woman', '重庆市江北区', 78, 101, '1995', '1995-12-11', '2023-12-31 01:00:00', '2023-12-31 01:00:00'),(100009, '翠花', 47, 'woman', '西安市碑林区', 86, 102, '1997', '1997-05-24', '2023-12-31 01:00:00', '2023-12-31 01:00:00'),(100010, '无忌', 19, 'man', '北京市西城区', 93, 103, '1998', '1998-08-26', '2023-12-31 01:00:00', '2023-12-31 01:00:00');
查看数据:
我们尝试进行一个 update
操作。
update student_info
set name = '张无忌'
where stu_number = 100010;
可以看到对应数据的 updateTime
字段也自动更新了。