当前位置: 首页 > 知识库问答 >
问题:

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

康秋月
2023-03-14

这是我到目前为止的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服务器版本对应的手册,在第7行的“(TypeID))”附近使用正确的语法

我尝试过创建不同的测试表,省略了NULL/NOT NULL,但似乎什么都不起作用。任何帮助都将非常感谢!

共有1个答案

贾兴学
2023-03-14

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

>

  • BLOBTEXT列不能有DEFAULT值。

    TINYTEXTVARCHAR(255)相同,因此您不能为TINYTEXT字段声明最大长度,因为一个已经隐含。

    在单词PRIMARYKEY之间需要一个空格。它应该是主键。

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

    更好:

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

    有关更多信息,请参阅MySQL文档。在所有这些更正之后,以下是正在工作的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)
    );
    

    如果您在这个SQL FIDLE中单击“构建模式”(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);
    

    是的,它的可读性不高,但如果我们运行它,就会在第18行出现语法错误,即TINYTEXT(30)行。阅读文档、在线询问等都会告诉你这是错误的。一旦所有错误都被修复,请再次使代码可读,然后就可以设置了。

  •  类似资料:
    • 问题内容: 我正在尝试在Go中执行MERGE语句: 但是我得到了这个错误: 在MySQL中也是如此: 怎么了? 问题答案: 不支持,等效的是 插入…在重复的密钥更新上 尝试这个, 但请确保将其设置为或。

    • 问题内容: 我的“其他”有两个错误,我不知道该怎么办。他们被标记为评论!!导入了“ Punto”和“ Cuadrante”。还有一个枚举。 问题答案: 您可以使用if and else if实现您想要的 如果有的话,您可以拥有更多。 您当前的代码缺少一些右括号,这会导致您所拥有的错误,并且可以通过以下方式修复: 另一种/更好的方法是:

    • SQL查询: 这是一个旧文件,我试图通过phpMyAdmin在HostGator上运行。我收到一个错误,上面写着: MySQL说:#1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以在第5行的“)ENGINE=MyISAM”附近使用正确的语法 更新:如果我将语句更改为this,我仍然会收到错误: 我得到错误: 错误1064 (42000):您的SQL语法有错误;检查与您的

    • 我在尝试使用flyway和hibernate为PostgresSql创建表时遇到语法错误的问题。Trip类与其他类没有关系(还没有)。我已经成功地为其他两个类创建了购买和用户,但是这个只是给出了错误。 错误信息: [错误]测试运行:1,失败:0,错误:1,跳过:0,所用时间:3.003秒 SQL状态:42000错误代码:42000消息:SQL语句“CREATE TABLE TRIP(ID BIGI

    • 我们可以像这样使用if-field: 但是这里有一些问题,我不明白为什么。 > 如果我运行(count已定义),则会引发错误: 我们能不能先分配一个值? 当我运行count=1 if False else l.append(count 1)(注意:count=0,l=[])时,将引发一个错误: l的结果是。 使用相同的条件,如果使用if-else块,则不会出现错误。 你能解释一下区别吗?

    • 目前遇到此语法错误,错误发布在代码下方。 上面的代码,无法找出if语句上的语法错误。错误消息将很快粘贴为注释