我正在尝试在mySQL中创建一个新表,它向我显示了这个错误:
预计会有一个结束括号(近))。
参考结束括号,然后是分号。我认为它与CONSTRAINTS系列有关,因为它在我删除它时会消失。
pg_temp
答案 0 :(得分:1)
您在此行后面缺少逗号:CONSTRAINT' User_FName_nn' NOT NULL(' FName')
CREATE TABLE 'User' (
'FName' varchar(10),
'LName' varchar(10),
'Email' varchar(20),
'Phone' int(20),
'Password' varchar(20),
'Address' varchar(100),
'BuyerNum' int(3),
'SellerNum' int(3),
CONSTRAINT 'User_FName_nn' NOT NULL('FName') <--- ,
CONSTRAINT 'User_LName_nn' NOT NULL('LName'),
CONSTRAINT 'User_Email_pk' PRIMARY KEY('Email'),
CONSTRAINT 'User_Phone_uk' UNIQUE('Phone'),
CONSTRAINT 'User_Pass_nn' NOT NULL('Pass')
);
正如其他人所说:
Gordon Linoff的answer提供了一些很好的提示,你应该仔细研究并理解为什么要在设计数据库的其余部分时使用它们。
编辑:另一种解决方案如下:
CREATE TABLE User2 (
UserId int auto_increment PRIMARY KEY,
FName varchar(10) NOT NULL,
LName varchar(10),
Email varchar(20) NOT NULL UNIQUE,
Phone int(20),
Password varchar(20)NOT NULL,
Address varchar(100),
BuyerNum int(3),
SellerNum int(3)
);
答案 1 :(得分:1)
这里有一些问题,我不认为删除CONSTRAINT
子句时错误确实消失了。您使用单引号('
)而不是反引号(`
)。
在第一个CONSTRAINT
子句后,您还缺少逗号。更新如下:
CREATE TABLE `User` (
`FName` varchar(10) NOT NULL,
`LName` varchar(10) NOT NULL,
`Email` varchar(20),
`Phone` int(20),
`Password` varchar(20) NOT NULL,
`Address` varchar(100),
`BuyerNum` int(3),
`SellerNum` int(3),
CONSTRAINT `User_Email_pk` PRIMARY KEY(`Email`),
CONSTRAINT `User_Phone_uk` UNIQUE(`Phone`)
);
请注意,我们还删除了CONSTRAINT
的{{1}}子句,而是将它们添加到列定义中。
答案 2 :(得分:0)
您需要在第一行CONSTRAINT
行结束后加上逗号。
答案 3 :(得分:0)
You Forgot , after
CONSTRAINT 'User_FName_nn' NOT NULL('FName') this
答案 4 :(得分:0)
删除单引号并将NOT NULL添加到所需字段。
并且,如果可能的话,不要使用保留字。
CREATE TABLE User_Account ( FName varchar(10) NOT NULL, LName varchar(10) NOT NULL, Email varchar(20), Phone int(20), Password varchar(20) NOT NULL, Address varchar(100), BuyerNum int(3), SellerNum int(3), CONSTRAINT User_Email_pk PRIMARY KEY(Email), CONSTRAINT User_Phone_uk UNIQUE(Phone) );
✓
dbfiddle here
答案 5 :(得分:0)
首先,我假设单引号都是问题中的拼写错误。
其次,将这些短约束放在列定义中,除非你有强烈的命名要求:
CREATE TABLE User (
FName varchar(10) NOT NULL,
LName varchar(10) NOT NULL,
Email varchar(20) PRIMARY KEY,
Phone varchar(20) UNIQUE,
Password varchar(20) NOT NULL, -- should be encrypted
Address varchar(100),
BuyerNum int(3),
SellerNum int(3)
);
分割定义时,很难弄清楚给定列的定义方式。 “哦,这是一个接受NULL
值的字符串。等等!它也是NOT NULL
。等等!它也是UNIQUE
。”
我还将phone
更改为字符串。例如,有些数字以“0”或“+”开头。
此外,您应该有userId
作为第一列:
CREATE TABLE User (
UserId int auto_increment PRIMARY KEY,
FName varchar(10) NOT NULL,
LName varchar(10) NOT NULL,
Email varchar(20) NOT NULL UNIQUE,
Phone varchar(20) UNIQUE,
Password varchar(20) NOT NULL, -- should be encrypted
Address varchar(100),
BuyerNum int(3),
SellerNum int(3)
);
为什么?
答案 6 :(得分:0)
在每个CONSTRAINT之后放一个(逗号),除了最后一个CONSTRAINT。 这样: CONSTRAINT&#39; User_FName_nn&#39; NOT NULL(&#39; FName&#39;),
答案 7 :(得分:0)
表名不需要单引号,并且在第一行约束之后,其他所有人都建议使用逗号。
下面... CREATE TABLE用户(FName varchar(10)NOT NULL, LName varchar(10)NOT NULL, 电子邮件varchar(20), 电话int(20), 密码varchar(20)NOT NULL,地址varchar(100), BuyerNum int(3), SellerNum int(3), CONSTRAINT User_Email_pk PRIMARY KEY(电子邮件), CONSTRAINT User_Phone_uk UNIQUE(电话));