基于tb_person中person_id=1向tb_meals插入数据失效问题求助
问题分析与解决方案
你的代码核心问题是表名/字段名不匹配,同时存在枚举值大小写不一致、自增主键错误赋值的问题,这些问题导致条件判断逻辑失效。以下是修正后的完整代码和关键说明:
修正后的SQL代码
-- 创建餐食表(统一表名,保持与后续操作一致) create table if not exists tb_meal( meal_id int primary key auto_increment, meal_type enum("Vegan","Meat","Fish") not null, meal varchar(100) not null, price double, meal_date date not null, status enum("pending","done") default("pending") ); -- 创建人员表(统一表名,保持与后续操作一致) create table if not exists tb_person( person_id int primary key auto_increment, person_name varchar(100) not null, office enum("Student","Teacher") not null, date_order_made DATETIME default now(), meal_ int, FOREIGN KEY (meal_) REFERENCES tb_meal(meal_id) ); -- 插入人员数据(修正表名,枚举值与定义大小写一致) insert into tb_person(person_name,office) values("ao","Student"),("Tb","Teacher"); -- 插入餐食数据(修正表/字段名,移除自增主键手动赋值,确保条件判断生效) INSERT INTO tb_meal (meal_type, meal, price, meal_date) SELECT "Meat", "laranajaa", 29.30, '2022-03-22' FROM DUAL WHERE EXISTS (SELECT 1 FROM tb_person WHERE person_id = 1);
关键修正点
- 表/字段名统一:原代码创建的表是
tb_meal和tb_person,但插入查询时用了tb_almocos、tb_pessoas这类不匹配的名称,字段名也存在对应错误(比如id_almocos对应meal_id),导致SQL无法定位正确的表和字段,条件判断自然失效。 - 自增主键处理:
meal_id是自增主键,插入时无需手动指定值,数据库会自动生成唯一ID。 - 枚举值匹配:原插入人员数据时用了小写的
"student",但表定义中枚举是"Student",会触发插入错误,修正为一致的大小写格式。 - 条件逻辑生效:修正后的
EXISTS子句查询正确的tb_person表和person_id字段,只有当person_id=1的记录存在时,才会执行餐食数据的插入操作。
内容的提问来源于stack exchange,提问作者cdb
相关产品推荐
相关产品推荐

