Korth《数据库系统概念》time_slot表创建插入数据类型匹配问题求解
问题原因
- 字段数量不匹配:你现有建表只定义了4个字段,但每条插入语句传入了6个值,测试数据将开始时间拆为小时、分钟两个独立值,结束时间也拆为小时、分钟两个独立值,和你当前单字段存储完整时间的设计不匹配。
- 字段类型不匹配:你定义的
start_time、end_time为time类型,无法直接匹配测试数据中独立的字符串格式小时、分钟参数。 - 字段命名不符合设计要求:你建表时将日期字段命名为
s_day,和需求中要求的day字段名不一致。
调整方案
方案1:仅调整表结构,无需修改现有插入SQL
调整字段拆分时分,完全适配现有插入语句,建表语句如下:
create table time_slot( time_slot_id varchar (4), day varchar(2), start_hour varchar(2), start_min varchar(2), end_hour varchar(2), end_min varchar(2), primary key(time_slot_id, day, start_hour, start_min) );
调整说明:
- 字段名
s_day改为day,匹配需求定义 - 移除原
time类型的start_time、end_time字段,拆分为start_hour、start_min、end_hour、end_min四个varchar类型字段,和插入语句的6个参数一一对应 - 联合主键调整为
time_slot_id、day、start_hour、start_min,和原设计中「时间段唯一标识」的逻辑一致
方案2:保留原表结构设计,仅修改插入SQL
如果不想调整表结构,可以将插入语句中的时间拼接为time类型支持的HH:MM格式,修改后的插入语句如下:
insert into time_slot values ('A', 'M', '08:00', '08:50'); insert into time_slot values ('A', 'W', '08:00', '08:50'); insert into time_slot values ('A', 'F', '08:00', '08:50'); insert into time_slot values ('B', 'M', '09:00', '09:50');
内容的提问来源于stack exchange,提问作者Encipher
相关产品推荐
相关产品推荐

