无法创建表 'mydb.contact' (错误号:150)

27 浏览
0 Comments

无法创建表 'mydb.contact' (错误号:150)

请注意,这是我的SQL脚本:\n

#-- 创建user表
CREATE TABLE IF NOT EXISTS user(
  iduser int AUTO_INCREMENT,
  nom VARCHAR(50) NOT NULL,
  prenom VARCHAR(50) ,
  adressemail VARCHAR(200) NOT NULL,
  motdepasse VARCHAR(200) NOT NULL,
  CONSTRAINT pk_user PRIMARY KEY(iduser)
);
#-- 创建contact表
CREATE TABLE IF NOT EXISTS contact(
  idcontact INT AUTO_INCREMENT,
  nom VARCHAR(45) NOT NULL,
  prenom VARCHAR(45),
  adressemail VARCHAR(200) UNIQUE,
  user_iduser INT NOT NULL,
  CONSTRAINT pk_contact PRIMARY KEY(idcontact),
  CONSTRAINT fk_contact_userIduser_user FOREIGN KEY (user_iduser) REFERENCES user(iduser) ON DELETE SET NULL ON UPDATE CASCADE
);

\n当我在我的MariaDB数据库上执行它时,出现了这个错误:无法创建表\'mydb.contact\' (错误号:150)

0
0 Comments

在MySQL中,当外键约束存在问题时,会返回这个错误。另外,如果这个表被创建、删除和重新创建过,可能会存在一个不匹配的现有引用。

要解决这个问题,我们可以按照以下步骤进行操作:

1. 检查外键约束的命名:确保在创建外键约束时,为每个约束指定一个唯一的名称。如果没有为约束命名,MySQL会自动生成一个名称,可能会导致冲突。

2. 检查数据类型的匹配:确保外键列和参考列具有相同的数据类型和长度。如果数据类型不匹配,MySQL会报错。

3. 检查引用表和被引用表的创建顺序:如果引用表还未创建,或者被引用表已删除,再尝试创建外键约束就会失败。确保引用表先于被引用表被创建。

4. 检查引用表和被引用表的引擎类型:如果引用表和被引用表使用的是不同的存储引擎,也可能导致外键约束创建失败。确保引用表和被引用表使用相同的存储引擎。

5. 检查表结构的完整性:确保所有被引用的列都有相应的索引。如果没有为被引用列创建索引,MySQL无法创建外键约束。

通过检查和解决以上问题,可以解决这个错误,并成功创建外键约束。

0
0 Comments

在创建表时出现了(Can't create table 'mydb.contact' (errno: 150))的错误。这个错误的原因是在创建表时,设置了一个外键约束,并且将该外键设置为不为空(NOT NULL)。然而,在引用表中,该外键所引用的主键列是可以为空的。由于这个不匹配,导致了错误的出现。

要解决这个问题,需要将外键约束设置为允许为空。可以通过在创建表时使用

ON DELETE SET NULL

语句来实现。同时,也可以在引用表中将外键列设置为可为空。

通过这种方式,就可以解决(Can't create table 'mydb.contact' (errno: 150))这个错误。这个错误的原因是由于在外键约束设置不正确导致的,通过正确设置外键约束,就可以避免这个错误的出现。

0
0 Comments

在你的外键约束中,你将删除操作设置为set null,但是user_iduser列不允许为空值,因为它被指定为not null,这使得约束无效。要么将列更改为允许为空值,要么更改约束中的删除操作。

MySQL的在线手册甚至对此有一个警告:

如果指定了SET NULL操作,请确保在子表中没有将列声明为NOT NULL。

这个问题的原因是外键约束中的删除操作与列的约束不一致,解决方法是将列的约束更改为允许为空值或更改约束中的删除操作。

0