本文共 1703 字,大约阅读时间需要 5 分钟。
如何解决MySQL中创建表的外键约束错误
当尝试创建一个包含外键约束的表时,可能会遇到以下错误:
Can't create table hw7.airport_codenames errno:150
这个错误通常是由于外键约束定义不当导致的。为了解决这个问题,我们需要重新组织表的创建顺序,并在主表中定义外键约束。
以下是解决方案的详细步骤:
删除原有表首先,我们需要确保所有相关表已经被删除,以避免数据一致性问题。
USE hw7;SET foreign_key_checks = 0;DROP TABLE IF EXISTS airport_codes;DROP TABLE IF EXISTS airport_locations;DROP TABLE IF EXISTS airport_codenames;SET foreign_key_checks = 1;
重新创建表我们需要按照以下顺序创建表:
-- 创建空表,供外键约束准备CREATE TABLE airport_locations ( airport_code char(3) NOT NULL, city varchar(20) NOT NULL, state char(2) NOT NULL, PRIMARY KEY (airport_code));-- 创建空表,供外键约束准备CREATE TABLE airport_codenames ( airline_code char(2) NOT NULL, name varchar(20) NOT NULL, PRIMARY KEY (airline_code));-- 主表,包含外键约束CREATE TABLE airport_codes ( airport_code char(3) NOT NULL, airline_code char(2) NOT NULL, PRIMARY KEY (airport_code, airline_code), -- 外键约束定义在主表中 FOREIGN KEY (airport_code) REFERENCES airport_locations (airport_code), FOREIGN KEY (airline_code) REFERENCES airport_codenames (airline_code));
插入数据使用原始数据表(airport_airlines
)插入数据到新表中。
-- 插入到 airport_locations 表INSERT INTO airport_locations SELECT DISTINCT airport_code, city, state FROM airport_airlines;-- 插入到 airport_codenames 表INSERT INTO airport_codenames SELECT DISTINCT airline_code, name FROM airport_airlines;-- 插入到 airport_codes 表INSERT INTO airport_codes SELECT DISTINCT airport_code, airline_code FROM airport_airlines;
airport_locations
和 airport_codenames
被 airport_codes
依赖,因此它们应该先被创建。DELETE
或 DISTINCT
来清理数据。通过以上步骤,可以避免外键约束错误,并确保数据库的正确性。
转载地址:http://nlffk.baihongyu.com/