MySQL含TIME类型的INSERT语句语法错误排查求助
解决MySQL INSERT语句的语法错误问题
嘿,我帮你排查出了这条INSERT语句里的几个关键问题,咱们一个个说:
自增ID字段的非法空值:你的
id是自增字段,在VALUES列表里直接留空(也就是(,14,,...里的第一个空位置)是不符合MySQL语法的。对于自增字段,你有两个选择:要么直接把id从INSERT的列名列表里删掉(推荐这种,MySQL会自动帮你生成自增ID);要么在VALUES对应的位置写NULL或者DEFAULT,让MySQL自动填充自增值。日期字段未加单引号:
date_played是日期类型,你写的2018-04-15没有用单引号包裹,MySQL会把它当成算术表达式2018 - 04 - 15来计算,结果是2009,这完全不是你想要的日期值。必须用单引号把日期字符串括起来,也就是'2018-04-15'。空值写法的规范优化:
schedule_id和forfeit_reason对应的VALUES位置你留了空,虽然某些场景下MySQL能识别,但更规范的写法是用NULL(如果字段允许为NULL)或者空字符串'',这样能避免语法歧义。
修正后的语句(推荐版本)
这个版本去掉了自增的id列,是最简洁的写法:
INSERT INTO `lwljhb_lwl_matches` (league_seasons_id, schedule_id, playoff_round, scheduled_week_number, date_played, winner_id, loser_id, forfeit, forfeit_reason, match_begin_time, match_end_time) VALUES (14, NULL, 0, 1, '2018-04-15', 52, 87, 0, NULL, '14:55:00','17:41:00');
另一种保留id列的写法
如果你一定要在列名列表里保留id,可以这样写:
INSERT INTO `lwljhb_lwl_matches` (id, league_seasons_id, schedule_id, playoff_round, scheduled_week_number, date_played, winner_id, loser_id, forfeit, forfeit_reason, match_begin_time, match_end_time) VALUES (NULL, 14, NULL, 0, 1, '2018-04-15', 52, 87, 0, NULL, '14:55:00','17:41:00');
另外说一下,你写的match_begin_time和match_end_time这两个TIME类型字段是没问题的,单引号包裹的写法完全正确。
内容的提问来源于stack exchange,提问作者John Biddle
相关产品推荐
相关产品推荐

