我正在創建一個SQL腳本並將其導入到phpMyAdmin中。下面是代碼:phpMyAdamin中的SQL腳本錯誤 - 外鍵約束
DROP DATABASE IF EXISTS Carpool;
CREATE DATABASE Carpool;
USE Carpool;
CREATE TABLE IF NOT EXISTS users (
username varchar(100) NOT NULL,
firstname varchar(100) NOT NULL,
lastname varchar(100) NOT NULL,
age int(10) NOT NULL,
email varchar(100) NOT NULL,
gender varchar(1) NOT NULL,
passhash varchar(100) NOT NULL,
PRIMARY KEY(username)
);
CREATE TABLE IF NOT EXISTS cars (
car_id int(50) NOT NULL AUTO_INCREMENT,
cartype varchar(50),
neatness varchar(50),
color varchar(50),
seats int(50),
PRIMARY KEY(car_id)
);
CREATE TABLE IF NOT EXISTS startinglocation (
startinglocation_id int(100) NOT NULL AUTO_INCREMENT,
address varchar(200) NOT NULL,
zipcode varchar(50) NOT NULL,
city varchar(50) NOT NULL,
state varchar(50) NOT NULL,
longitude float(10) NOT NULL,
latitude float(10) NOT NULL,
PRIMARY KEY(startinglocation_id)
);
CREATE TABLE IF NOT EXISTS endinglocation (
endinglocation_id int(100) NOT NULL AUTO_INCREMENT,
address varchar(200) NOT NULL,
zipcode varchar(50) NOT NULL,
city varchar(50) NOT NULL,
state varchar(50) NOT NULL,
longitude float(10) NOT NULL,
latitude float(10) NOT NULL,
PRIMARY KEY(endinglocation_id)
);
CREATE TABLE IF NOT EXISTS carpool (
car_id int(50),
carpool_id int(50) NOT NULL AUTO_INCREMENT,
datetime varchar(50),
duration varchar(50),
numberofpassengers int(10),
startingtime varchar(50) NOT NULL,
endingtime varchar(50) NOT NULL,
recurrencelevel int(10),
startinglocation_id int(100),
endinglocation_id int(100),
PRIMARY KEY(carpool_id),
FOREIGN KEY(car_id)
REFERENCES cars(car_id)
ON DELETE SET NULL ON UPDATE CASCADE,
FOREIGN KEY(startinglocation_id)
REFERENCES startinglocation(startinglocation_id)
ON DELETE SET NULL ON UPDATE CASCADE,
FOREIGN KEY(endinglocation_id)
REFERENCES endinglocation(endinglocation_id)
ON DELETE SET NULL ON UPDATE CASCADE
);
CREATE TABLE IF NOT EXISTS driver (
username varchar(50) NOT NULL,
carpool_id int(50) NOT NULL,
FOREIGN KEY (username)
REFERENCES users(username)
ON DELETE SET NULL ON UPDATE CASCADE,
FOREIGN KEY (carpool_id)
REFERENCES carpool(carpool_id)
ON DELETE SET NULL ON UPDATE CASCADE
);
CREATE TABLE IF NOT EXISTS passenger (
username varchar(50) NOT NULL,
carpool_id int(50) NOT NULL,
FOREIGN KEY (username)
REFERENCES users(username)
ON DELETE SET NULL ON UPDATE CASCADE,
FOREIGN KEY (carpool_id)
REFERENCES carpool(carpool_id)
ON DELETE SET NULL ON UPDATE CASCADE
);
GRANT SELECT, INSERT, UPDATE, DELETE
ON *
TO mgs_user
IDENTIFIED BY 'Password1';
而且我收到這樣的錯誤報告:
錯誤 SQL查詢:
CREATE TABLE IF NOT EXISTS carpool (
car_id int(50),
carpool_id int(50) NOT NULL AUTO_INCREMENT,
datetime varchar(50),
duration varchar(50),
numberofpassengers int(10),
startingtime varchar(50) NOT NULL,
endingtime varchar(50) NOT NULL,
recurrencelevel int(10),
startinglocation_id int(100),
endinglocation_id int(100),
PRIMARY KEY(carpool_id),
FOREIGN KEY(car_id)
REFERENCES cars(car_id)
ON DELETE SET NULL ON UPDATE CASCADE,
FOREIGN KEY(startinglocation_id)
REFERENCES startinglocation(startinglocation_id)
ON DELETE SET NULL ON UPDATE CASCADE,
FOREIGN KEY(endinglocation_id)
REFERENCES endinglocation(endinglocation_id)
ON DELETE SET NULL ON UPDATE CASCADE
)
MySQL表示:文件
1005 - 燦」 t創建表carpool
。 (錯誤:150「外鍵約束不正確」)(詳細信息...)
我覺得我正確地引用了外鍵的表格,但是我已經嘗試了一些小改動但沒有成功。
您無法引用尚未定義的表格。所以改變表格創建的順序。 –
我編輯了上面的代碼以顯示這是我嘗試過的方法。我確定所有的外鍵都是在被引用的表之後創建的。它正在產生同樣的錯誤。 –
driver.username和users.username不是相同類型(長度)。你爲什麼不使用auto_incrementing user_id? –