2017-12-07 12 views
-1

私はプロジェクトのスキーマで作業しています。私はローカルホストにインポートしようとしています。情報をデータベースからWebページにプッシュするクエリ。 #1215 - Cannot add foreign key constraintエラーが発生しました。これは、外部キーとしてcities(city_id)の使用に関係しています。私は問題が何であるかわからない、彼らは同じデータ型(INT)であり、city_idcitiesテーブルの主キーです。私はここで人を困らせているし、私はここに誰かが手を貸してくれることを望んでいる。私は理由がわかりません。外部キー制約エラーを追加できません

EDITED:私はこれを動作させましたが、それは作業表の下に貼り付ける注文表がありません。

DROP TABLE IF EXISTS cities; 
-- Table for storing cities 
create table cities (
    city_id INT(100) NOT NULL AUTO_INCREMENT, 
    city_name VARCHAR(32), 
    PRIMARY KEY(city_id) 
)ENGINE=InnoDB; 

DROP TABLE IF EXISTS drivers; 
-- table for Drivers registered in lyft database 
create table drivers (
    driver_id INT(100) NOT NULL AUTO_INCREMENT, 
    fname VARCHAR(32), 
    lname VARCHAR(32), 
    address VARCHAR(32), 
    contactnumber VARCHAR(32), 
    driver_city INT(100), 
    PRIMARY KEY(driver_id), 
    FOREIGN KEY (driver_city) REFERENCES cities(city_id) 
)ENGINE=InnoDB; 

DROP TABLE IF EXISTS cars; 
-- Table for storing cars information in lyft 
create table cars (
    car_id INT(100) NOT NULL AUTO_INCREMENT, 
    car_name VARCHAR(32), 
    car_type VARCHAR(32), 
    car_model VARCHAR(32), 
    car_licencenumber VARCHAR(32), 
    PRIMARY KEY(car_id) 
)ENGINE=InnoDB; 


DROP TABLE IF EXISTS customers; 
-- Table for storing customers using lyft 
create table customers (
    c_id INT(100) NOT NULL AUTO_INCREMENT, 
    c_fname VARCHAR(32), 
    c_lname VARCHAR(32), 
    c_city INT(100), 
    PRIMARY KEY (c_id), 
    FOREIGN KEY (c_city) REFERENCES cities(city_id) 
)ENGINE=InnoDB; 

DROP TABLE IF EXISTS owns; 
-- Table stores which drivers are having which cars 
create table owns (
    driver INT(100), 
    car INT(100), 
    PRIMARY KEY (driver,car), 
    FOREIGN KEY (driver) REFERENCES drivers(driver_id) ON DELETE CASCADE, 
    FOREIGN KEY (car) REFERENCES cars(car_id) ON DELETE CASCADE 
)ENGINE=InnoDB; 

以下である私は、データベースに追加することはできません。表:

Static analysis: 

2 errors were found during analysis. 

    An expression was expected. (near "ORDER" at position 21) 
    Unrecognized keyword. (near "ORDER" at position 21) 

SQL query: 

DROP TABLE IF EXISTS ORDER 

MySQL said: Documentation 
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER' at line 1 

FINAL EDIT:私は最終的に考え出し

DROP TABLE IF EXISTS order; 
-- Table stores which drivers are driving a customer 
create table order (
    driver INT(100), 
    customer INT(100), 
    city INT(100), 
    PRIMARY KEY (driver, customer, city), 
    FOREIGN KEY (driver) REFERENCES drivers(driver_id), 
    FOREIGN KEY (customer) REFERENCES customers(c_id), 
    FOREIGN KEY (city) REFERENCES cities(city_id) 
)ENGINE=InnoDB; 

phpmyadminを経由して、それを追加しようとすると、私は次のエラーを取得しますそれは、私の問題は、orderは、エラーを投げていたので、mysqlの予約語/キーワードです。私はそれをに変更し、すべてが順調です。誰かが私と同じトラブルに遭遇した場合、私は最終的なスキーマを投稿します。エラーCannot resolve table nameから

DROP TABLE IF EXISTS cities; 
-- Table for storing cities 
create table cities (
    city_id INT(100) NOT NULL AUTO_INCREMENT, 
    city_name VARCHAR(32), 
    PRIMARY KEY(city_id) 
)ENGINE=InnoDB; 

DROP TABLE IF EXISTS drivers; 
-- table for Drivers registered in lyft database 
create table drivers (
    driver_id INT(100) NOT NULL AUTO_INCREMENT, 
    fname VARCHAR(32), 
    lname VARCHAR(32), 
    address VARCHAR(32), 
    contactnumber VARCHAR(32), 
    driver_city INT(100), 
    PRIMARY KEY(driver_id), 
    FOREIGN KEY (driver_city) REFERENCES cities(city_id) 
)ENGINE=InnoDB; 

DROP TABLE IF EXISTS cars; 
-- Table for storing cars information in lyft 
create table cars (
    car_id INT(100) NOT NULL AUTO_INCREMENT, 
    car_name VARCHAR(32), 
    car_type VARCHAR(32), 
    car_model VARCHAR(32), 
    car_licencenumber VARCHAR(32), 
    PRIMARY KEY(car_id) 
)ENGINE=InnoDB; 


DROP TABLE IF EXISTS customers; 
-- Table for storing customers using lyft 
create table customers (
    c_id INT(100) NOT NULL AUTO_INCREMENT, 
    c_fname VARCHAR(32), 
    c_lname VARCHAR(32), 
    c_city INT(100), 
    PRIMARY KEY (c_id), 
    FOREIGN KEY (c_city) REFERENCES cities(city_id) 
)ENGINE=InnoDB; 

DROP TABLE IF EXISTS owns; 
-- Table stores which drivers are having which cars 
create table owns (
    driver INT(100), 
    car INT(100), 
    PRIMARY KEY (driver,car), 
    FOREIGN KEY (driver) REFERENCES drivers(driver_id) ON DELETE CASCADE, 
    FOREIGN KEY (car) REFERENCES cars(car_id) ON DELETE CASCADE 
)ENGINE=InnoDB; 

DROP TABLE IF EXISTS orders; 
-- Table stores which drivers are driving a customer 
create table orders (
    driver INT(100), 
    customer INT(100), 
    city INT(100), 
    PRIMARY KEY (driver, customer, city), 
    FOREIGN KEY (driver) REFERENCES drivers(driver_id), 
    FOREIGN KEY (customer) REFERENCES customers(c_id), 
    FOREIGN KEY (city) REFERENCES cities(city_id) 
)ENGINE=InnoDB; 
+0

どのエンジンをお使いですか?エラーは同じです:https://stackoverflow.com/questions/18391034/cannot-resolve-table-name-close-to –

+0

@LioraHaydont明らかに、InnoDBエンジン – Sherry

+0

@LioraHaydont申し訳ありません、私は自分のスキーマを更新しましたテーブルごとにEngine、Charset、およびCollat​​eを表示します。 –

答えて

0

、私はあなたがあなたが存在しないテーブルを参照していることの表citiesを作成する前にテーブルdriversを作成しようとしていると思います。だから解決策は、テーブルcitiesを最初に作成することです

+0

修正済みですが、まだエラーが発生しました。次の出力があります。 ' 参照された列が最初の列として表示されるか、または表の列の種類が で参照先の表が制約と一致しない場合。 ENUMとSETの内部ストレージタイプが、InnoDB-4.1.12以上で作成された テーブルで変更され、古いテーブル のカラムは、新しいテーブルのそのようなカラムで参照できません。 正しい外部キー定義については、http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.htmlを参照してください。 ------------ ' –

+0

phpmyadminでインポートするときに、このエラーが発生します:'#1215 - 外部キー制約を追加できません ' –

+0

@ Anonymous23234720-12473これで 'city_id INT(100 ) 'UNSIGNED'テーブル' cities'のテーブル 'drivers'はまだ' driver_city INT'ですが、データ型は同じでなければなりません。 'driver_city INT(100)UNSIGNED' – Sherry

関連する問題