我遇到解析错误。该错误是由图像表产生的。我正在尝试使用与主键具有不同列名的外键。
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/