2016-04-03 6 views
1

私は21行目のERROR 1064(42000)を取得しています。これはVehicleテーブルのVIN_Numberです。エンティティインベントリは問題なく構築されますが、VIN_Numberはすべての発生に対してvarchar(17)型です。私はテーブルが正しい順序で構築されていると信じています。スペルや句読点の誤りが見つかりません。私はチェックしなければならないことのアイデアがありません。私は何が欠けているのですか?テーブルの作成時にmysqlエラー1064が発生する。私は何を確認できますか?

注:Invoiceにもエラーが表示されますが、Vehicleが作成されるまでは作成できないことがわかります。あなたは、MySQL(reference)の予約キーワードですconditionという名前のカラムを持つ車両テーブルの定義では

ALTER TABLE Vehicle DROP FOREIGN KEY fk_Veh_Vehicle_TypeID; 
ALTER TABLE Inventory DROP FOREIGN KEY fk_Inv_Vehicle_TypeID; 
ALTER TABLE Invoice DROP FOREIGN KEY fk_Customer_ID; 
ALTER TABLE Invoice DROP FOREIGN KEY fk_Sales_Person_ID; 
ALTER TABLE Invoice DROP FOREIGN KEY fk_VIN_Number; 

DROP TABLE IF EXISTS Vehicle, VehicleType, 
    Invoice, Customer, SalesPerson, Inventory; 


CREATE TABLE VehicleType (
    Vehicle_TypeID int NOT NULL, 
    Veh_Make varchar(15), 
    Veh_Model varchar(15), 
    Veh_Year int, 
    PRIMARY KEY (Vehicle_TypeID) 
) Engine=InnoDB; 


CREATE TABLE Vehicle (
    VIN_Number varchar(17) NOT NULL, 
    Vehicle_TypeID int NOT NULL, 
    Condition varchar(10), 
    Color varchar(8), 
    PRIMARY KEY (VIN_Number), 
    CONSTRAINT fk_Veh_Vehicle_TypeID FOREIGN KEY(Vehicle_TypeID) 
    REFERENCES VehicleType(Vehicle_TypeID) 
) Engine=InnoDB; 


CREATE TABLE Inventory (
    Stock_ID int NOT NULL, 
    Vehicle_TypeID int NOT NULL, 
    Quantity int, 
    PRIMARY KEY (Stock_ID), 
    CONSTRAINT fk_Inv_Vehicle_TypeID FOREIGN KEY (Vehicle_TypeID) 
    REFERENCES VehicleType(Vehicle_TypeID) 
) Engine=InnoDB; 


CREATE TABLE Customer (
    Customer_ID varchar(10) NOT NULL, 
    Cus_LastName varchar(15), 
    Cus_FirstName varchar(15), 
    Cus_Street varchar(20), 
    Cus_City varchar(15), 
    Cus_Zip varchar(5), 
    Cus_Phone varchar(10), 
    PRIMARY KEY (Customer_ID) 
) Engine=InnoDB; 


CREATE TABLE SalesPerson (
    Sales_Person_ID varchar(10) NOT NULL, 
    Sal_LastName varchar(15), 
    Sal_FirstName varchar(15), 
    Sal_Street varchar(15), 
    Sal_City varchar(15), 
    Sal_Zip varchar(5), 
    Sal_Phone varchar(10), 
    Sal_Years_Worked int, 
    Sal_Commission_Rate float(4), 
    PRIMARY KEY (Sales_Person_ID) 
) Engine=InnoDB; 


CREATE TABLE Invoice (
    Invoice_ID varchar(10) NOT NULL, 
    Customer_ID varchar(10) NOT NULL, 
    Sales_Person_ID varchar(10) NOT NULL, 
    VIN_Number varchar(17) NOT NULL, 
    Price float(10), 
    PRIMARY KEY (Invoice_ID), 
    CONSTRAINT fk_Customer_ID FOREIGN KEY (Customer_ID) 
    REFERENCES Customer(Customer_ID), 
    CONSTRAINT fk_Sales_Person_ID FOREIGN KEY (Sales_Person_ID) 
    REFERENCES SalesPerson(Sales_Person_ID), 
    CONSTRAINT fk_VIN_Number FOREIGN KEY (VIN_Number) 
    REFERENCES Vehicle(VIN_Number) 
) Engine=InnoDB; 
+2

**正確で完全な**エラーメッセージは何ですか? –

+1

あなたの列の長さは*極端に*ひどいです。なぜあなたは物事をそんなにばかげて制限していますか?姓の15文字は完全に不十分です。彼らの短期間のため、後であなたの後ろに来る可能性があります。逸脱する本当の理由がない限り、デフォルトの255を使用してください。 – tadman

答えて

1

。列に別の名前を使用するか、次のようにバッククォートで囲みます。`condition`

オブジェクト名にキーワード(予約済みまたは未使用)を使用するのは、一般的に避けたいものです。

+1

テーブル名または列名には予約済みのキーワードを使用しないでください。 – tadman

+1

@tadmanもちろん – jpw

+0

@jpw私はちょうど学校でSQLを勉強し始めましたし、あまりにも多くの予約語があることは考えられませんでした。ありがとう。 – WP0987

関連する問題