带有TINYTEXT列的CREATE TABLE语句中的语法错误1064?

时间:2012-06-27 02:44:53

标签: mysql command-line mysql-error-1064 create-table

这是我到目前为止的MySQL代码:

CREATE DATABASE bankbase;

USE bankbase;

CREATE TABLE clienttable(
ClientID SMALLINT(15) NOT NULL DEFAULT 0,
ClientFirstName VARCHAR(30) NOT NULL DEFAULT "first name",
ClientLastName VARCHAR(30) NOT NULL DEFAULT "last name",
ClientPhone CHAR(10) NOT NULL, ClientEmail 

TINYTEXT(30) NULL,
ClientAddress TINYTEXT(128) NOT NULL,
PRIMARYKEY(ClientID)
);

CREATE TABLE branchtable(
BranchID SMALLINT(15) NOT NULL DEFAULT 0,
BranchCity TINYTEXT(30) NOT NULL DEFAULT city, 

BranchManagerFName VARCHAR(30) NULL DEFAULT "Branch Manager's First Name",
BranchManagerLName VARCHAR(30) NULL 

DEFAULT "Branch Manager's LAst Name",
BranchPhone CHAR(10) NOT NULL,
BranchEmail TINYTEXT(30) NULL DEFAULT @bank.com,
PRIMARYKEY(BranchID)
);

CREATE TABLE transactiontable(
TypeID SMALLINT(15) NOT NULL DEFAULT 0,
Type ENUM('CHEQUING','SAVINGS') NOT NULL,
TransAmount DECIMAL NOT NULL,
TransDate TIMESTAMP NOT NULL,
Balance DOUBLE NOT NULL,
PRIMARYKEY(TypeID)
);

在命令行中使用MySQL运行此代码会出现此错误:

  

错误1064(42000):您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在'(TypeID)附近使用正确的语法           )'在第7行

我尝试过创建不同的测试表,省略了NULL / NOT NULL,但似乎没有任何效果。任何帮助都将非常非常感谢!

2 个答案:

答案 0 :(得分:9)

以下是我在原始脚本中看到的问题:

  1. BLOBTEXT列不能包含DEFAULT个值。

  2. TINYTEXTVARCHAR(255)相同,因此您无法声明TINYTEXT字段的最大长度,因为已经隐含了一个字段。

  3. 您需要在PRIMARYKEY字之间留一个空格。它应该是PRIMARY KEY

  4. 最后,它本身不是问题,但在您的第一个CREATE TABLE语句中,您有奇数间距。将ClientEmail行更改为以下内容会使其更具可读性:

  5. 好多了:

    ClientPhone CHAR(10) NOT NULL,
    ClientEmail TINYTEXT NOT NULL,
    

    有关详细信息,请参阅MySQL documentation。在所有这些更正之后,这些是有效的MySQL查询:

    CREATE DATABASE bankbase;
    USE bankbase;
    
    CREATE TABLE clienttable(
    ClientID SMALLINT(15) NOT NULL DEFAULT 0,
    ClientFirstName VARCHAR(30) NOT NULL DEFAULT "first name",
    ClientLastName VARCHAR(30) NOT NULL DEFAULT "last name",
    ClientPhone CHAR(10) NOT NULL,
    ClientEmail TINYTEXT NULL,
    ClientAddress TINYTEXT NOT NULL,
    PRIMARY KEY(ClientID)
    );
    
    CREATE TABLE branchtable(
    BranchID SMALLINT(15) NOT NULL DEFAULT 0,
    BranchCity TINYTEXT NOT NULL,
    BranchManagerFName VARCHAR(30) NULL DEFAULT "Branch Manager's First Name", 
    BranchManagerLName VARCHAR(30) NULL DEFAULT "Branch Manager's LAst Name",
    BranchPhone CHAR(10) NOT NULL,
    BranchEmail TINYTEXT NULL,
    PRIMARY KEY(BranchID)
    );
    
    CREATE TABLE transactiontable(
    TypeID SMALLINT(15) NOT NULL DEFAULT 0,
    Type ENUM('CHEQUING','SAVINGS') NOT NULL,
    TransAmount DECIMAL NOT NULL,
    TransDate TIMESTAMP NOT NULL,
    Balance DOUBLE NOT NULL,
    PRIMARY KEY(TypeID)
    );
    

    如果点击this SQL fiddle中的Build Schema,您会发现它有效!

    有关如何有条不紊地修复此错误的更多信息

    如果你是有条理的,这些问题很容易解决,特别是对于CREATE TABLE语句。例如,当您调试第一个CREATE TABLE语句时,请一次查看列声明。

    尝试使用第一列创建一个表:

    CREATE TABLE clienttable(
    ClientID SMALLINT(15) NOT NULL DEFAULT 0);
    

    该代码有效,因此删除表并逐个添加列,直到您添加一个引发错误的列:

    DROP TABLE clienttable;
    CREATE TABLE clienttable(
    ClientID SMALLINT(15) NOT NULL DEFAULT 0,
    ClientFirstName VARCHAR(30) NOT NULL DEFAULT "first name",
    ClientLastName VARCHAR(30) NOT NULL DEFAULT "last name",
    ClientPhone CHAR(10) NOT NULL, ClientEmail 
    
    TINYTEXT(30) NULL);
    

    我们收到您提出的错误信息:

      

    错误1064(42000):您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在第7行使用“(30)NULL”附近的正确语法

    现在您确切知道哪条线有错误。我甚至偶尔会看到这样编写的代码(这与前一个例子中的代码相同):

    CREATE TABLE clienttable(
    ClientID
    SMALLINT(15) 
    NOT NULL 
    DEFAULT 0,
    ClientFirstName 
    VARCHAR(30) 
    NOT NULL 
    DEFAULT "first name",
    ClientLastName 
    VARCHAR(30) 
    NOT NULL 
    DEFAULT "last name",
    ClientPhone 
    CHAR(10) 
    NOT NULL,
    ClientEmail 
    TINYTEXT(30) //Line 18 <- This is where the error occurs 
    NULL);
    

    是的,它的可读性不高,但如果我们运行它,我们会收到语法错误at line 18,即TINYTEXT(30)行。阅读文档,在线询问等会告诉你这是错的。修复所有错误后,再次使代码可读,然后进行设置。

答案 1 :(得分:0)

使用非MySQL语法的语法,它的PostgreSQL确保你的语法与MySQL有关。