2016-07-06 174 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