语法错误1064在CREATE TABLE语句TINYTEXT列?(Syntax error 106

2019-07-30 03:34发布

这是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):你在你的SQL语法错误; 检查对应于你的MySQL服务器版本使用附近“(TYPEID))”在第7行正确的语法手册

我试图创建不同的测试表中,而忽略了NULL / NOT NULL,但似乎没有任何工作。 任何帮助将是非常,非常感谢!

Answer 1:

下面是我用你的原剧本看到的问题:

  1. BLOBTEXT列不能有DEFAULT值。

  2. TINYTEXT是一样的VARCHAR(255)所以你不能对声明的最大长度TINYTEXT ,因为一个已经暗示领域。

  3. 你需要的话之间的空间PRIMARYKEY 。 它应该是PRIMARY KEY

  4. 最后,它本身并不是一个问题,但在你的第一个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)
);

如果你点击Build Schema在这个SQL小提琴 ,你会看到,它的作品!

关于如何有条不紊地解决了这样的错误更多的信息

如果你有条理,这些问题都容易解决,特别是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):你在你的SQL语法错误; 检查对应于你的MySQL服务器版本正确的语法使用近“(30)NULL)”在第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);

是的,这不是很强的可读性,但如果我们运行它,我们得到了一个语法错误at line 18 ,即TINYTEXT(30)线。 阅读文档,询问在线等会告诉你WY这是错误的。 一旦所有的错误都是固定的,使代码再次可读性和你设置。



Answer 2:

该语法您使用的不是MySQL的语法建立一个PostgreSQL确保你的语法就到MySQL。



文章来源: Syntax error 1064 in CREATE TABLE statement with TINYTEXT columns?