尝试创建关系数据库时,MySqlException未处理错误

时间:2015-03-21 16:05:04

标签: c# mysql

我在尝试创建关系数据库时遇到此错误:

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))" );

2 个答案:

答案 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)
);

请注意使用内联引用。我确信有些人会不同意,但我发现当他们在一个地方时更容易遵循列定义。此外,这会添加自动递增主键,并使用相同的列名作为主键和外键。

最后,有三个看起来相同的列 - Primitive1Primitive2Primitive3 - 通常是一个糟糕的设计。最好有另一个表,每个类有一行和“Primitive”。