0

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

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

4

1 回答 1

10

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

  1. BLOB并且TEXT列不能有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)
);

如果您单击此 SQL fiddleBuild 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):您的 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)行。阅读文档、在线询问等会告诉你这是错误的。修复所有错误后,再次使代码可读,然后就可以了。

于 2012-06-27T02:51:12.823 回答