拜托,这是我的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)
答案 0 :(得分:1)
在您的外键约束中,您已将删除操作设置为SELECT avg(sub.impressions)
FROM (
WITH summary AS (
SELECT n.team,
n.name,
n.league,
n.impressions,
n.created_at,
ROW_NUMBER() OVER(PARTITION BY n.team
ORDER BY n.created_at DESC) AS rowcount
FROM nielsen_data n
WHERE n.name = 'Social Media - Twitter Followers'
AND n.league = 'National Football League'
)
SELECT s.*
FROM summary s
WHERE s.rowcount = 1) sub;
,但列set null
不允许空值,因为它被指定为user_iduser
,这使约束无效。更改列以允许空值或更改约束中的删除操作。
在线MySQL手册甚至有关于此的a warning:
如果指定SET NULL操作,确保您尚未声明 子表中的列为NOT NULL 。
答案 1 :(得分:1)
您的语句ON DELETE SET NULL
限制您创建表,因为您的列user_iduser
在写入时不能为NULL
user_iduser INT NOT NULL
答案 2 :(得分:0)
我知道在MySQL中,当出现外键约束问题时会返回此错误。此外 - 如果创建,删除和重新创建此表,则可能存在未排列的现有引用。