2016-04-03 7 views
1

Ich erhalte eine ERROR 1064 (42000) in Zeile 21, die VIN_Number in Fahrzeug-Tabelle. Entity Inventory wird ohne Probleme erstellt, VIN_Number hat den Typ varchar (17) für alle Vorkommen. Ich glaube, die Tische werden in der richtigen Reihenfolge gebaut. Ich kann keine Rechtschreib- oder Interpunktionsfehler finden. Ich habe keine Ideen von Dingen, die ich überprüfen sollte. Was fehlt mir?mysql Fehler 1064 beim Erstellen der Tabelle. Was kann ich überprüfen?

Hinweis: ich auch einen Fehler für Rechnung bekommen, aber ich weiß, dass es nicht erstellt werden kann, bis Fahrzeug erstellt wird.

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

Was ist der ** genaue, vollständige ** Fehlermeldung Sie bekommen? –

+1

Ihre Spaltenlängen sind * extrem * geizig. Warum beschränkst du Dinge so lächerlich eng? Fünfzehn Zeichen für einen Nachnamen sind völlig unzureichend. Jeder einzelne von ihnen wird wahrscheinlich später wieder beißen, weil sie zu kurz sind. Sofern Sie einen wirklich soliden Grund abweichen müssen, verwenden Sie den Standardwert von 255 – tadman

Antwort

1

In der Definition des Fahrzeug Tabelle haben Sie eine Spalte mit dem Namen condition, die ein reserviertes Schlüsselwort in MySQL ist (reference). Verwenden Sie einen anderen Namen für die Spalte oder schließen Sie sie in Backticks wie folgt ein: `condition`

Verwenden Sie Schlüsselwörter (reserviert oder nicht) für Objektnamen ist in der Regel etwas, das Sie vermeiden möchten.

+1

noch besser, nicht reservierten Schlüsselwörter für Tabellen- oder Spaltennamen verwenden. – tadman

+1

@tadman Natürlich – jpw

+0

@jpw Ich habe gerade angefangen SQL in der Schule studiert und hatte keine Ahnung, dass es so viele reservierte Worte waren. Vielen Dank. – WP0987

Verwandte Themen