gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:58:55 25 4
gpt4 key购买 nike

这是我目前的 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/

25 4 0