SQL中如何通过引用关联表列向自建表插入数据(实操场景)
卡通角色表数据插入修正方案
现有表结构
1. Animation_Companies表
建表语句:
CREATE TABLE Animation_Companies ( CompanyID INT PRIMARY KEY AUTO_INCREMENT, CompanyName VARCHAR(100) NOT NULL );
已完成数据插入:
INSERT INTO animation_companies(CompanyName) VALUES ('Warner Bros.'), ('Disney'), ('Nickelodeon');
2. Cartoon_Characters表
建表语句:
CREATE TABLE Cartoon_Characters ( cartoonID INT PRIMARY KEY AUTO_INCREMENT, cartoonName VARCHAR(100) NOT NULL, yearCreated INT, OwningCompany INT NOT NULL, CompanyID INT NOT NULL, CONSTRAINT Cartoon_Characters_fk_Animation_Companies FOREIGN KEY (CompanyID) REFERENCES Animation_Companies (CompanyID) );
原插入语句的问题
- 字段类型不匹配:
OwningCompany字段定义为INT类型,但原语句中插入了字符串(如'Warner Bros.'),会触发类型转换错误。 - 语法错误:最后一条记录里
'Aang'和2005之间缺少逗号,违反SQL语法规范。
修正后的插入语句
严格遵循要求(不使用列列表、自增字段用DEFAULT、字符串用单引号、所属公司引用整数ID),正确语句如下:
INSERT INTO cartoon_characters VALUES (DEFAULT, 'Porky Pig', 1935, 1, 1), (DEFAULT, 'Daffy Duck', 1937, 1, 1), (DEFAULT, 'Elmer Fudd', 1937, 1, 1), (DEFAULT, 'Bugs Bunny', 1940, 1, 1), (DEFAULT, 'Foghorn Leghorn', 1946, 1, 1), (DEFAULT, 'Mickey Mouse', 1928, 2, 2), (DEFAULT, 'Goofy', 1934, 2, 2), (DEFAULT, 'Donald Duck', 1931, 2, 2), (DEFAULT, 'Elsa of Arendelle', 2013, 2, 2), (DEFAULT, 'Anna of Arendelle', 2013, 2, 2), (DEFAULT, 'Doug Funnie', 1991, 3, 3), (DEFAULT, 'Arnold Shortman', 1985, 3, 3), (DEFAULT, 'Tommy Pickles', 1991, 3, 3), (DEFAULT, 'Aang', 2005, 3, 3);
修正说明
- 将原语句中
OwningCompany位置的公司名称替换为对应Animation_Companies表的CompanyID(Warner Bros.对应1,Disney对应2,Nickelodeon对应3)。 - 补全最后一条记录缺失的逗号,修复语法错误。
- 自增字段
cartoonID统一使用DEFAULT,符合要求。
内容的提问来源于stack exchange,提问作者dwightasaurus97
相关产品推荐
相关产品推荐

