我在尝试创建关系数据库时遇到此错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' REFERENCES classes(Name))' at line 1
我使用Update
方法更新数据库并创建新表,第一个Update
方法有效,但第二个方法打破了它。这是我的代码
one.Update("CREATE TABLE classes (Name VARCHAR (30) , Primitive1 VARCHAR(30), Primitive2 VARCHAR(30), Primitive3 VARCHAR(30), PRIMARY KEY(Name)) ");
one.Update("CREATE TABLE primitives (Name VARCHAR(30), Size_bytes INT, Description TEXT, FOREIGN KEY (Classes), REFERENCES classes(Name))" );
答案 0 :(得分:0)
one.Update("CREATE TABLE primitives (Name VARCHAR(30), Size_bytes INT, Description TEXT, FOREIGN KEY (Classes) REFERENCES classes(Name))" );
是对的。您在,
REFERENCES
答案 1 :(得分:0)
您可能还有其他问题,但foreign key
声明中有一个额外的逗号:
FOREIGN KEY (Classes), REFERENCES classes(Name)
应该是:
FOREIGN KEY (Classes) REFERENCES classes(Name)
我注意到表中没有名为Classes
的实际列。你需要声明,或者你可能意味着:
FOREIGN KEY (Name) REFERENCES classes(Name)
编辑:
我是自动增加密钥的强烈倡导者:
CREATE TABLE classes (
ClassesId int auto_increment primary key,
Name VARCHAR(30) not null unique,
Primitive1 VARCHAR(30),
Primitive2 VARCHAR(30),
Primitive3 VARCHAR(30)
);
CREATE TABLE primitives(
PrimitivesId int auto_increment primary key,
Name VARCHAR(30),
Size_bytes INT,
Description TEXT,
ClassId int references classes(ClassId)
);
请注意使用内联引用。我确信有些人会不同意,但我发现当他们在一个地方时更容易遵循列定义。此外,这会添加自动递增主键,并使用相同的列名作为主键和外键。
最后,有三个看起来相同的列 - Primitive1
,Primitive2
和Primitive3
- 通常是一个糟糕的设计。最好有另一个表,每个类有一行和“Primitive”。