0

拜托,这是我的 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)

4

3 回答 3

1

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

在线 MySQL 手册甚至对此有警告

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

于 2016-03-16T17:23:15.737 回答
1

您的语句ON DELETE SET NULL限制您创建表,user_iduser因为您写的列不能为 NULL

 user_iduser INT NOT NULL
于 2016-03-16T17:26:27.720 回答
0

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

于 2016-03-16T17:24:49.497 回答