mysql - 如何使用与主键具有不同列名的外键?

标签 mysql foreign-keys

我遇到解析错误。该错误是由图像表产生的。我正在尝试使用与主键具有不同列名的外键。

DROP DATABASE IF EXISTS fastpic;


CREATE DATABASE IF NOT EXISTS fastpic;


USE fastpic;


CREATE TABLE user
  (
  email_address varchar(255),
  name varchar (255),
  user_id INT NOT NULL,

   PRIMARY KEY (user_id),
   created_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
   modified_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
   );

CREATE TABLE image
   (
   filename varchar (255),
   image_id INT NOT NULL,
    PRIMARY KEY (image_id),
   uploaded_by_user_id INT NOT NULL,
   FOREIGN KEY (uploaded_by_user_id),
   REFERENCES user(user_id),
   ON DELETE CASCADE),
   created_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
   modified_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
   );

CREATE TABLE commentcomment
   (
    image_id INT NOT NULL,
    FOREIGN KEY (image_id),
    REFERENCES image(image_id),
    ON DELETE CASCADE),
    user_id INT NOT NULL,
    FOREIGN KEY (user_id),
    REFERENCES user(user_id),
    comment_id INT NOT NULL,
    PRIMARY KEY (comment_id),
    TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    imageurl varchar (1000) NOT NULL,
    comment varchar(2500),
    created_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    modified_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
    );

CREATE TABLE follow
     (
      user_id INT NOT NULL,
      FOREIGN KEY (user_id),
      REFERENCES user(user_id),
      ON DELETE CASCADE),
      following_id INT NOT NULL,
      PRIMARY KEY (following_id),
      timestamp_id INT NOT NULL,
      created_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
      modified_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
      )

最佳答案

您的脚本中有几个合成错误。其中一些包括:

  • 每个引用前都加逗号并级联。
  • 删除时级联后的右括号。
  • follow 表创建代码中的半列,位于最后一个右括号之前。
  • commentcomment 表中定义主键后,没有为 TIMESTAMP 指定列名称。

您可以看到MySQL tutorials有关使用 MySQL 作为 DDL(数据定义语言)的更多信息。 这是一个SQL Fiddle Demo .

DROP DATABASE IF EXISTS fastpic;
CREATE DATABASE IF NOT EXISTS fastpic;
USE fastpic;

CREATE TABLE user ( 
 email_address varchar(255),
 name varchar (255),
 user_id INT NOT NULL,
 PRIMARY KEY (user_id),
 created_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
 modified_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE image ( 
 filename varchar (255),
 image_id INT NOT NULL,
 PRIMARY KEY (image_id),
 uploaded_by_user_id INT NOT NULL,
 FOREIGN KEY (uploaded_by_user_id) REFERENCES user(user_id),
 created_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
 modified_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 
);

CREATE TABLE commentcomment ( 
 image_id INT NOT NULL,
 FOREIGN KEY (image_id) REFERENCES image(image_id) ON DELETE CASCADE,
 user_id INT NOT NULL,
 FOREIGN KEY (user_id) REFERENCES user(user_id),
 comment_id INT NOT NULL,
 PRIMARY KEY (comment_id),
 -- [No_Column name]TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
 imageurl varchar (1000) NOT NULL,
 comment varchar(2500),
 created_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
 modified_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE follow ( 
 user_id INT NOT NULL,
 FOREIGN KEY (user_id) REFERENCES user(user_id) ON DELETE CASCADE,
 following_id INT NOT NULL,
 PRIMARY KEY (following_id),
 timestamp_id INT NOT NULL,
 created_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
 modified_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 
);

关于mysql - 如何使用与主键具有不同列名的外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48575607/

相关文章:

mysql - 在 Rails 中添加外键

c# - Entity Framework Core 中的外键 NullReferenceException

python - ProgrammingError : (1064, '您的 SQL 语法有误;检查与您的 MySQL 服务器版本对应的手册以了解正确的语法

PHP mySQL 按日期排序帖子

xml - 使用外键将表加载到 PostgreSQL 会产生错误

mysql - 多个表和列的外键?

mysql - key mysql 的重复条目

mysql - SQL 在 2 列中选择不同的值,无论其顺序如何?

mysql - 当我指定选择前 10 行时,有什么方法可以阻止 MySQL 读取整个表吗?

mysql - SQL : Add A Foreign Key relation to two existing(filled) tables