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

Can't create table 'mydb.contact' (errno: 150)

拜托,这是我的 sql 脚本

#-- creation de la table 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)
);


#-- creation de la table user
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
);

当我在我的 maria db 数据库上执行它时,我得到这个错误:

Can't create table 'mydb.contact' (errno: 150)

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

在线 MySQL 手册甚至 a warning 关于这个:

If you specify a SET NULL action, make sure that you have not declared the columns in the child table as NOT NULL.

我在 MySQL 中知道,当形成外键约束时出现问题时会返回此错误。此外 - 如果此 table 已创建、删除和重新创建,则可能存在未对齐的现有引用。

你的声明 ON DELETE SET NULL 限制你创建 table 因为你的列 user_iduser 不能像你写的那样为 NULL

 user_iduser INT NOT NULL