以下是我在您的原始脚本中发现的问题:
-
BLOB
and TEXT
列不能有DEFAULT
values.
-
TINYTEXT
是相同的VARCHAR(255)
,所以你不能声明 a 的最大长度TINYTEXT
字段,因为已经隐含了一个字段。
-
单词之间需要有一个空格PRIMARYKEY
。它应该是PRIMARY KEY
.
-
最后,这本身不是问题,但在你的第一个CREATE TABLE
声明,你有奇怪的间距。改变ClientEmail
以下行使其更具可读性:
好多了:
ClientPhone CHAR(10) NOT NULL,
ClientEmail TINYTEXT NOT NULL,
See the MySQL 文档 https://dev.mysql.com/doc/refman/5.0/en/blob.html了解更多信息。经过所有这些更正后,这些是有效的 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
in 这个 SQL 小提琴 http://sqlfiddle.com/#!2/40854,你会发现它有效!
有关如何有条不紊地修复此类错误的更多信息
如果你有条理,这些问题很容易解决,尤其是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)
线。阅读文档、在线询问等会告诉你这是错误的。修复所有错误后,再次使代码可读即可。