这是我到目前为止的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运行此代码会出现此错误:
错误1064(42000):您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在'(TypeID)附近使用正确的语法 )'在第7行
我尝试过创建不同的测试表,省略了NULL / NOT NULL,但似乎没有任何效果。任何帮助都将非常非常感谢!
答案 0 :(得分:9)
以下是我在原始脚本中看到的问题:
BLOB
和TEXT
列不能包含DEFAULT
个值。
TINYTEXT
与VARCHAR(255)
相同,因此您无法声明TINYTEXT
字段的最大长度,因为已经隐含了一个字段。
您需要在PRIMARYKEY
字之间留一个空格。它应该是PRIMARY KEY
。
最后,它本身不是问题,但在您的第一个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);
我们收到您提出的错误信息:
错误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)
行。阅读文档,在线询问等会告诉你这是错的。修复所有错误后,再次使代码可读,然后进行设置。
答案 1 :(得分:0)
使用非MySQL语法的语法,它的PostgreSQL确保你的语法与MySQL有关。