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

标签 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 中运行此代码会出现此错误:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(TypeID) )' at line 7

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

最佳答案

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

  1. BLOBTEXT 列不能有 DEFAULT 值。

  2. TINYTEXTVARCHAR(255) 相同,因此您不能为 TINYTEXT 字段声明最大长度因为已经暗示了一个。

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

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

好多了:

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);

我们收到您询问的错误:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(30) NULL)' at line 7

现在您确切地知道哪一行有错误。我什至偶尔看到这样写的代码(这与前面示例中的代码相同):

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) 行。阅读文档、在线询问等会告诉您为什么这是错误的。修复所有错误后,让代码再次可读,一切就绪。

关于mysql - 带有 TINYTEXT 列的 CREATE TABLE 语句中的语法错误 1064?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11218713/

相关文章:

mysql - 错误代码 : 1582 Incorrect parameter count in the call to native function 'STR_TO_DATE'

php - 统计月初以来的优惠券总值(value)

PHP - 检查 tinyint 在 MySQL 中是否有 (1)

MySQL On Delete Cascade 删除所有内容

command-line - BOUML 命令行逆向工程师

mysql - MySql 函数无法编译,我找不到原因

mysql - 仅当子进程在 hibernate 状态下不存在时才保存该子进程

linux - 在 linux 上查看文件大小

perl - 如何将 Perl 的单行代码转换为完整的脚本?

php - MySQL建表错误?也许是版本问题?