【问题标题】:What is wrong with this create table statement?这个创建表语句有什么问题?
【发布时间】:2012-02-08 02:17:58
【问题描述】:

我目前正在为一个学校项目编写一个数据库。我在 xampp 上使用 MySQL 并尝试将此表添加到我的数据库中。我的 SQL 语法仍然不是 100%,这里有一个错误,我似乎无法弄清楚:

CREATE TABLE photoDB(
    U_id INT UNSIGNED NOT NULL FOREIGN KEY REFERENCES userDB(U_id),
    P_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    C_id INT UNSIGNED NOT NULL FOREIGN KEY REFERENCES table_comments(C_id),

    PhotoName VARCHAR(50),
    Description TEXT NOT NULL,
    File VARCHAR,
    Views BIGINT UNSIGNED,
    Rep DOUBLE (100000, 2),
    UploadDate DATETIME,
    EditDate DATETIME,
    EditVersion INT UNSIGNED,
    LatestEditVerion INT UNSIGNED

    );

我尝试创建的所有表都有相同的问题。

这是错误信息:

#1064 - 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 'FOREIGN KEY REFERENCES userDB(U_id), P_id INT UNSIGNED NOT NULL AUTO_INCREMENT ' at line 2

提前致谢

【问题讨论】:

  • 这个错误可能是由于还没有创建所需的表 userDB 和 table_cmets 造成的吗? Mysql 是否要求被引用的表已经存在,引用表才能有语句?

标签: mysql xampp


【解决方案1】:

前面的答案都是正确的。你还有其他问题(例如,你不能有这么大的 DOUBLE;最大值 = 255)。

你有问题,伙计。

这是一个简单的例子,也许你可以扩展。它有两个表,它们之间存在多对多关系。连接表有两个外键。它适用于 MySQL - 我刚刚创建了一个数据库并添加了这些表。

use stackoverflow;

create table if not exists stackoverflow.product
(
    product_id int not null auto_increment,
    name varchar(80) not null,
    primary key(product_id)
);

create table if not exists stackoverflow.category
(
    category_id int not null auto_increment,
    name varchar(80) not null,
    primary key(category_id)
);

create table if not exists stackoverflow.product_category
(
    product_id int,
    category_id int,
    primary key(product_id, category_id),
    constraint product_id_fkey
        foreign key(product_id) references product(product_id)
        on delete cascade
        on update no action,
    constraint category_id_fkey
        foreign key(category_id) references category(category_id)
        on delete cascade
        on update no action
);

insert into stackoverflow.product(name) values('teddy bear');
insert into stackoverflow.category(name) values('toy');
insert into stackoverflow.product_category
    select p.product_id, c.category_id from product as p, category as c
    where p.name = 'teddy bear' and c.name = 'toy';

【讨论】:

  • IVe 编辑了表以声明键列,然后将该列声明为主 ID(不确定我是否描述正确)。使用连接表而不是在主表中使用外键的主要思想是什么?
  • 外键在这个例子中是正确的:就像我说的那样,这是一个多对多的关系。如果一个产品只能属于一个类别,那么产品表中就有一个外键指向它的类别。
【解决方案2】:

此行末尾需要一个逗号

EditVersion INT 无符号,

【讨论】:

    【解决方案3】:

    您需要在关键字 unsigned 的末尾添加一个逗号。

    【讨论】:

    • 没有人需要coma!也许comma 是有意的? ;)
    【解决方案4】:
     FOREIGN KEY(  C_id ) REFERENCES table_comments( C_id ),
     FOREIGN KEY( U_id ) REFERENCES userDB (U_id ),
    

    尝试像这样重写你的外键

    【讨论】:

      猜你喜欢
      • 2011-01-17
      • 2010-09-19
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多