Mysql SQL语法创建表时出错
我试图使用 ,这似乎很好,但当我再添加一个表时,它抱怨语法有错误 以下是命令Mysql SQL语法创建表时出错,mysql,sql,Mysql,Sql,我试图使用 ,这似乎很好,但当我再添加一个表时,它抱怨语法有错误 以下是命令 CREATE TABLE IF NOT EXISTS User( uid INT, name VARCHAR(64) UNIQUE, birthday date, PRIMARY KEY(uid) ) ENGINE = InnoDB ; CREATE TABLE IF NOT EXISTS UserEmail( uid INT,
CREATE TABLE IF NOT EXISTS User(
uid INT,
name VARCHAR(64) UNIQUE,
birthday date,
PRIMARY KEY(uid)
) ENGINE = InnoDB ;
CREATE TABLE IF NOT EXISTS UserEmail(
uid INT,
email VARCHAR(64),
PRIMARY KEY(uid, email),
FOREIGN KEY(uid) REFERENCES User(uid)
);
但是,如果我想再添加一个表,它会说主键(uid)所在行的“')附近有语法错误
不确定哪里出错,因为新添加的命令中没有抱怨错误
--更新--
这已经解决了,但还有一个问题。
添加下表将抛出
无法创建表“estore.contains”(错误号:150)
--更新2--
我要添加的完整表
CREATE TABLE IF NOT EXISTS User(
uid INT,
name VARCHAR(64) UNIQUE,
birthday date,
PRIMARY KEY(uid)
) ENGINE = InnoDB ;
CREATE TABLE IF NOT EXISTS UserEmail(
uid INT,
email VARCHAR(64),
PRIMARY KEY(uid, email),
FOREIGN KEY(uid) REFERENCES User(uid)
);
CREATE TABLE friendship(
invite_uid INT,
accept_uid INT,
start_date DATE,
PRIMARY KEY(invite_uid, accept_uid),
FOREIGN KEY(invite_uid) REFERENCES User(uid),
FOREIGN KEY(accept_uid) REFERENCES User(uid)
);
CREATE TABLE Seller(
sid INT,
name VARCHAR(64),
PRIMARY KEY(sid)
);
CREATE TABLE Product(
pid INT,
sid INT,
name VARCHAR(64),
description TEXT,
price DOUBLE,
PRIMARY KEY(pid),
FOREIGN KEY(sid) REFERENCES Seller(sid)
);
CREATE TABLE buy(
uid INT,
pid INT,
time DATE,
PRIMARY KEY(uid, pid),
FOREIGN KEY(uid) REFERENCES User(uid),
FOREIGN KEY(pid) REFERENCES Product(pid)
);
CREATE TABLE Wishlist(
uid INT,
wid INT,
start_time DATE,
end_time DATE,
PRIMARY KEY(uid,wid),
FOREIGN KEY(uid) REFERENCES User(uid)
);
CREATE TABLE conntains(
uid INT,
wid INT,
pid INT,
PRIMARY KEY(uid, wid, pid),
FOREIGN KEY(uid) REFERENCES User(uid),
FOREIGN KEY(wid) REFERENCES Wishlist(wid),
FOREIGN KEY(pid) REFERENCES Product(pid)
)ENGINE = InnoDB;
有人能帮忙吗?Thx删除
,
行尾
FOREIGN KEY(accept_uid) REFERENCES User(uid),
--------------------------------------------^
删除
,
行尾
FOREIGN KEY(accept_uid) REFERENCES User(uid),
--------------------------------------------^
检查代码的最后一行
FOREIGN KEY(accept_uid) REFERENCES User(uid),
删除末尾的逗号。检查代码的最后一行
FOREIGN KEY(accept_uid) REFERENCES User(uid),
删除末尾的逗号。第三个表上有一个额外的逗号
CREATE TABLE IF NOT EXISTS User(
uid INT,
name VARCHAR(64) UNIQUE,
birthday date,
PRIMARY KEY(uid)
) ENGINE = InnoDB ;
CREATE TABLE IF NOT EXISTS UserEmail(
uid INT,
email VARCHAR(64),
PRIMARY KEY(uid, email),
FOREIGN KEY(uid) REFERENCES User(uid)
);
CREATE TABLE friendship(
invite_uid INT,
accept_uid INT,
start_date DATE,
PRIMARY KEY(invite_uid, accept_uid),
FOREIGN KEY(invite_uid) REFERENCES User(uid),
FOREIGN KEY(accept_uid) REFERENCES User(uid), <---- Extra comma
);
如果用户不存在,则创建表(
uid INT,
名称VARCHAR(64)唯一,
生日,
主键(uid)
)引擎=InnoDB;
如果不存在,则创建表UserEmail(
uid INT,
电邮VARCHAR(64),
主键(uid、电子邮件),
外键(uid)引用用户(uid)
);
创建桌面友谊(
邀请,
接受uid INT,
开始日期,
主键(邀请uid、接受uid),
外键(invite_uid)引用用户(uid),
外键(accept_uid)引用用户(uid),第三个表上有一个额外的逗号
CREATE TABLE IF NOT EXISTS User(
uid INT,
name VARCHAR(64) UNIQUE,
birthday date,
PRIMARY KEY(uid)
) ENGINE = InnoDB ;
CREATE TABLE IF NOT EXISTS UserEmail(
uid INT,
email VARCHAR(64),
PRIMARY KEY(uid, email),
FOREIGN KEY(uid) REFERENCES User(uid)
);
CREATE TABLE friendship(
invite_uid INT,
accept_uid INT,
start_date DATE,
PRIMARY KEY(invite_uid, accept_uid),
FOREIGN KEY(invite_uid) REFERENCES User(uid),
FOREIGN KEY(accept_uid) REFERENCES User(uid), <---- Extra comma
);
如果用户不存在,则创建表(
uid INT,
名称VARCHAR(64)唯一,
生日,
主键(uid)
)引擎=InnoDB;
如果不存在,则创建表UserEmail(
uid INT,
电邮VARCHAR(64),
主键(uid、电子邮件),
外键(uid)引用用户(uid)
);
创建桌面友谊(
邀请,
接受uid INT,
开始日期,
主键(邀请uid、接受uid),
外键(invite_uid)引用用户(uid),
外键(接受uid)引用用户(uid),@Daniel,您不能为表使用名称CONTAINS,因为它是SQL关键字。请使用其他名称创建表。@Daniel,您不能为表使用名称CONTAINS,因为它是SQL关键字。请使用其他名称创建表。幸运的是,我解决了第二个问题,外键做得不对,我需要使用
FOREIGN KEY(uid, wid) REFERENCES Wishlist(uid, wid),
要在Wishlist中引用主键组合,幸运的是我解决了第二个问题,外键没有正确设置,我需要使用
FOREIGN KEY(uid, wid) REFERENCES Wishlist(uid, wid),
FOREIGN KEY(accept_uid) REFERENCES User(uid),<-- Comma should be removed
要在Wishlist中引用主键组合不,我想这不是原因,将其更改为另一个名称并不能解决问题。我认为它与FK有关,但不确定具体如何Daniel,一个表只能使用一个主键。这应该会给您造成问题。但如果我必须使用组合主键,该怎么办更新我的问题以使上下文更清晰。正如您所看到的,引用的产品(wid)是其主键组合(wid,uid)的一部分不,我想这不是问题的原因,将其更改为另一个名称并不能解决问题。我认为这与FK有关,但不确定具体是什么原因Daniel,一个表只能使用一个主键。这应该会给您带来问题。但如果我必须使用组合主键,该怎么办?我已更新了我的问题,以使上下文更清晰。如您所知e、 引用的产品(wid)是其主键组合(wid,uid)的一部分。请为Wishlist和Product添加表结构。同时对所有表使用ENGINE=InnoDB,因为当表为非InnoDB时,不会创建外键(某些服务器使用默认的myisam引擎而不是innodb,并且使用myisam或不使用engine语句可能不会引发错误)请为Wishlist和Product添加表结构。另外,为所有表使用engine=innodb,因为当表为非innodb时,不会创建外键(某些服务器使用默认的myisam引擎而不是innodb,并且可能不会因使用myisam或未使用engine语句而引发错误)
FOREIGN KEY(accept_uid) REFERENCES User(uid),<-- Comma should be removed