-1
我的代码如下:奇怪的语法错误6.3
CREATE DATABASE IF NOT EXISTS store;
CREATE TABLE IF NOT EXISTS customer (
customer_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
first_name VARCHAR(20) NOT NULL,
middle_name VARCHAR(20),
last_name VARCHAR(40) NOT NULL,
email VARCHAR(60) NOT NULL,
usr_pword CHAR(10) NOT NULL,
reg_date DATE,
PRIMARY KEY (customer_id),
FOREIGN KEY (rental_id) REFERENCES (rental_id),
UNIQUE (email)
);
CREATE TABLE IF NOT EXISTS rental (
rental_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
date_out DATE NOT NULL,
date_in DATE NOT NULL,
cost INTEGER NOT NULL,
PRIMARY KEY (rental_id),
FOREIGN KEY (customer_id) REFERENCES (customer_id),
FOREIGN KEY (game_id) REFERENCES (game_id)
);
CREATE TABLE IF NOT EXISTS game (
game_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
game_name VARCHAR(60),
game_publisher VARCHAR(20),
PRIMARY KEY (game_id),
FOREIGN KEY (rental_id) REFERENCES (rental_id)
);
和我得到的错误: 错误代码1064,您在您的SQL语法错误...近“rental_id UNIQUE(电子邮件));”
即使没有阅读文档,它应该很明显在外键约束中需要表名。 FK的全部重点是与另一张桌子相关,并且需要知道哪张桌子。 – Barmar
@Barmar,没错,但期望DBMS知道明确的案例并做正确的事情可能是合理的。在这种情况下,只有一个表的主键名为'rental_id'。另一个例子是,如果JOIN查询中的列是明确的,则不必使用表名进行限定。另外,尽管MySQL不支持这个选项,但SQL中的外键如果与FK列名相同,可能会省略引用的列名。 –
谢谢,但是当我这样做,我得到一个错误,声称我没有我指的关键,但我这样做,你会碰巧知道为什么? (我的代码中的唯一更改是在外键引用之前具有表名) – Harvey