-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