2016-07-06 173 views
1

我最近買了這本書,名爲「SQL Queries for Mere Mortals(3rd Edition)」,用於學習SQL。它附帶有MySQL腳本,他們說我可以運行並且有示例數據庫一起工作,並與書跟着一起然而,一些腳本是導致錯誤消息下面是一個示例腳本這是行不通的:。MySQL:「CREATE DATABASE」導致MySQL錯誤代碼:1064

CREATE DATABASE EntertainmentAgencyModify; 

USE EntertainmentAgencyModify; 

CREATE TABLE Agents (
    AgentID int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    AgtFirstName nvarchar (25) NULL , 
    AgtLastName nvarchar (25) NULL , 
    AgtStreetAddress nvarchar (50) NULL , 
    AgtCity nvarchar (30) NULL , 
    AgtState nvarchar (2) NULL , 
    AgtZipCode nvarchar (10) NULL , 
    AgtPhoneNumber nvarchar (15) NULL , 
    DateHired date NULL , 
    Salary decimal(15, 2) NULL DEFAULT 0 , 
    CommissionRate float(24) NULL 
); 

CREATE TABLE Customers (
    CustomerID int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    CustFirstName nvarchar (25) NULL , 
    CustLastName nvarchar (25) NULL , 
    CustStreetAddress nvarchar (50) NULL , 
    CustCity nvarchar (30) NULL , 
    CustState nvarchar (2) NULL , 
    CustZipCode nvarchar (10) NULL , 
    CustPhoneNumber nvarchar (15) NULL 
); 

CREATE TABLE Engagements (
    EngagementNumber int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    StartDate date NULL , 
    EndDate date NULL , 
    StartTime time NULL , 
    StopTime time NULL , 
    ContractPrice decimal(15,2) NULL DEFAULT 0 , 
    CustomerID int NULL DEFAULT 0 , 
    AgentID int NULL DEFAULT 0 , 
    EntertainerID int NULL DEFAULT 0 
); 

CREATE TABLE Engagements_Archive (
    EngagementNumber int NOT NULL , 
    StartDate date NULL , 
    EndDate date NULL , 
    StartTime time NULL , 
    StopTime time NULL , 
    ContractPrice decimal(15,2) NULL , 
    CustomerID int NULL , 
    AgentID int NULL , 
    EntertainerID int NULL 
); 

CREATE TABLE Entertainer_Members (
    EntertainerID int NOT NULL , 
    MemberID int NOT NULL DEFAULT 0 , 
    Status smallint NULL DEFAULT 0 
); 

CREATE TABLE Entertainer_Styles (
    EntertainerID int NOT NULL , 
    StyleID int NOT NULL DEFAULT 0 
); 

CREATE TABLE Entertainers (
    EntertainerID int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    EntStageName nvarchar (50) NULL , 
    EntSSN nvarchar (12) NULL , 
    EntStreetAddress nvarchar (50) NULL , 
    EntCity nvarchar (30) NULL , 
    EntState nvarchar (2) NULL , 
    EntZipCode nvarchar (10) NULL , 
    EntPhoneNumber nvarchar (15) NULL , 
    EntWebPage nvarchar (50) NULL , 
    EntEMailAddress nvarchar (50) NULL , 
    DateEntered date NULL , 
    EntPricePerDay decimal(15,2) NULL 
); 

CREATE TABLE Members (
    MemberID int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    MbrFirstName nvarchar (25) NULL , 
    MbrLastName nvarchar (25) NULL , 
    MbrPhoneNumber nvarchar (15) NULL , 
    Gender nvarchar (2) NULL 
); 

CREATE TABLE Musical_Preferences (
    CustomerID int NOT NULL DEFAULT 0 , 
    StyleID int NOT NULL DEFAULT 0 
); 

CREATE TABLE Musical_Styles (
    StyleID int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    StyleName nvarchar (75) NULL 
); 

CREATE INDEX AgtZipCode ON Agents(AgtZipCode); 

CREATE INDEX CustZipCode ON Customers(CustZipCode); 

CREATE INDEX AgentsEngagements ON Engagements(AgentID); 

CREATE INDEX CustomerID ON Engagements(CustomerID); 

CREATE INDEX EmployeeID ON Engagements(AgentID); 

CREATE INDEX EntertainerID ON Engagements(EntertainerID); 

ALTER TABLE Engagements_Archive 
    ADD CONSTRAINT Engagements_Archive_PK PRIMARY KEY 
    (
     EngagementNumber 
    ); 

CREATE INDEX CustomerID ON Engagements_Archive(CustomerID); 

CREATE INDEX EmployeeID ON Engagements_Archive(AgentID); 

CREATE INDEX EntertainerID ON Engagements_Archive(EntertainerID); 

ALTER TABLE Entertainer_Members 
    ADD CONSTRAINT Entertainer_Members_PK PRIMARY KEY 
    (
      EntertainerID, 
      MemberID 
    ); 

CREATE INDEX EntertainersEntertainer_Members ON Entertainer_Members(EntertainerID); 

CREATE INDEX MembersEntertainer_Members ON Entertainer_Members(MemberID); 

ALTER TABLE Entertainer_Styles 
    ADD CONSTRAINT Entertainer_Styles_PK PRIMARY KEY 
    (
      EntertainerID, 
      StyleID 
    ); 

CREATE INDEX EntertainersEntertainer_Styles ON Entertainer_Styles(EntertainerID); 

CREATE INDEX Musical_StylesEntertainer_Styles ON Entertainer_Styles(StyleID); 

CREATE INDEX EntZipCode ON Entertainers(EntZipCode); 

ALTER TABLE Musical_Preferences 
    ADD CONSTRAINT Musical_Preferences_PK PRIMARY KEY 
    (
      CustomerID, 
      StyleID 
    ); 

CREATE INDEX CustomerID ON Musical_Preferences(CustomerID); 

CREATE INDEX StyleID ON Musical_Preferences(StyleID); 

ALTER TABLE Engagements 
    ADD CONSTRAINT Engagements_FK00 FOREIGN KEY 
    (
      AgentID 
    ) REFERENCES Agents (
      AgentID 
    ), 
    ADD CONSTRAINT Engagements_FK01 FOREIGN KEY 
    (
      CustomerID 
    ) REFERENCES Customers (
      CustomerID 
    ), 
    ADD CONSTRAINT Engagements_FK02 FOREIGN KEY 
    (
      EntertainerID 
    ) REFERENCES Entertainers (
      EntertainerID 
    ); 

ALTER TABLE Entertainer_Members 
    ADD CONSTRAINT Entertainer_Members_FK00 FOREIGN KEY 
    (
      EntertainerID 
    ) REFERENCES Entertainers (
      EntertainerID 
    ), 
    ADD CONSTRAINT Entertainer_Members_FK01 FOREIGN KEY 
    (
      MemberID 
    ) REFERENCES Members (
      MemberID 
    ); 

ALTER TABLE Entertainer_Styles 
    ADD CONSTRAINT Entertainer_Styles_FK00 FOREIGN KEY 
    (
      EntertainerID 
    ) REFERENCES Entertainers (
      EntertainerID 
    ) ON DELETE CASCADE, 
    ADD CONSTRAINT Entertainer_Styles_FK01 FOREIGN KEY 
    (
      StyleID 
    ) REFERENCES Musical_Styles 
    (
      StyleID 
    ); 

ALTER TABLE Musical_Preferences 
    ADD CONSTRAINT Musical_Preferences_FK00 FOREIGN KEY 
    (
      CustomerID 
    ) REFERENCES Customers (
      CustomerID 
    ) ON DELETE CASCADE, 
    ADD CONSTRAINT Musical_Preferences_FK01 FOREIGN KEY 
    (
      StyleID 
    ) REFERENCES Musical_Styles (
      StyleID 
    ); 

以下錯誤消息運行此腳本結果:

16:33:35 CREATE DATABASE EntertainmentAgency修改錯誤代碼:1064. 您的SQL語法有錯誤;檢查 對應於你的MySQL服務器版本正確的語法在行使用 附近「CREATE DATABASE EntertainmentAgencyModify」手動1 0.00041 秒

Screenshot

我試圖運行與來到其他腳本這本書也以「CREATE DATABASE」開頭,其中一些平穩運行,沒有任何錯誤,所以我很困惑,爲什麼我得到這個錯誤信息。任何幫助將不勝感激!謝謝大家!

+2

你現在不是有點懶嗎?如果你無法弄清楚什麼是錯誤的,那麼從結尾刪除東西,直到錯誤消失。一旦你確定了問題,修復它就容易了! – jarlh

+2

@jarlh來吧,錯誤消息說它在第一行。 – MAP

+0

@MAP,它呢?我想我也有點太懶。 – jarlh

回答

0

請注意,由於此腳本在頂部有一個「CREATE DATABASE」,因此如果該數據庫已存在,它將失敗。這也意味着,如果它部分起作用,並且您再次運行它,它將在下一次完全失敗。 「CREATE DATABASE」是一個相當大的錘子,所以你可能不想養成這麼做的習慣。但是,話雖如此,這是一個更大的錘子;添加

DROP DATABASE IF EXISTS EntertainmentAgencyModify; 

CREATE之前,其他類似。當你有真實的數據時,你當然不會想要使用這些數據。

+0

但是,如果數據庫存在,那不會導致語法錯誤,會嗎? –

+0

我從來沒有完全確信mysql爲各種現實產生的錯誤消息類型。消息說它在第一行。除了這種可能的情況外,對我來說看起來還不錯,所以我提到了它。我只想發表評論,但當時我無法評論(但現在我可以:-)。 – MAP

+0

我聽說,嘗試創建一個名爲'訂單'的表,但沒有引用名稱,彈出一個很好的語法錯誤,而不是錯誤地使用保留字 - 技術上正確,但如果你錯過了,仍然令人沮喪:) –

0

你可以嘗試運行在你的mysql控制檯鍵入它只是下面:

CREATE DATABASE EntertainmentAgencyModify; 

它應該只是工作,或至少告訴你更多的東西,然後一個語法錯誤。

+0

[它不需要引號](http://dev.mysql.com/doc/refman/5.7/en/creating-database.html) –

+0

它似乎甚至不能用引號xD我應該檢查的東西之前張貼一個答案 –

+0

@gilad更新了我的答案,謝謝你的領導:) –

0

該代碼執行得很好。可能是你的MySql的一個問題。

嘗試安裝新的MySql。 :)

https://www.mysql.com/downloads/

+0

謝謝@Aseem我認爲我有最新版本(社區服務器爲5.7.13,工作臺爲6.37.7)。儘管解決了這個問題。謝謝你的幫助。 – Joe

0

謝謝大家!我不知道爲什麼這可行,但我找到了解決方案。我不得不從腳本的第一行刪除「CREATE」並重新輸入。然後它工作。如果任何人有任何想法,爲什麼這個看似不相關的解決方案工作,我很想知道。謝謝大家的幫助!

+0

也許當你複製粘貼的腳本時,一個不可顯示的字符也被複制過了,用手去輸入字符串就可以刪除mysql掛起的字符。很高興它的工作! –

+0

是的,這聽起來不錯!謝謝! – Joe