MySQL创建具有唯一约束的表

Arl*_*ler 5 mysql sql

我刚开始使用SQL语法,我正在尝试创建一个表.

这是我的错误:

#1064 - 您的SQL语法有错误; 查看与您的MySQL服务器版本对应的手册,以便在'CONSTRAINT uc_people_2nd UNIQUE(lastName,firstName)附近使用正确的语法,在第7行查看ENGINE = INNODB'

这是我的SQL:

CREATE TABLE `people` (
`_id` INT NOT NULL AUTO_INCREMENT,
`lastName` TEXT NOT NULL,
`firstName` TEXT NOT NULL,
`JSON` TEXT NOT NULL,
PRIMARY KEY(_id)
CONSTRAINT uc_people_2nd UNIQUE (lastName,firstName),
) ENGINE = INNODB;
Run Code Online (Sandbox Code Playgroud)

我在NodeDB(我正在开发)中尝试了这个,然后是PHPMyAdmin.

Gor*_*off 10

修复逗号并输入名称varchar():

CREATE TABLE `people` (
`_id` INT NOT NULL AUTO_INCREMENT,
`lastName` varchar(255) NOT NULL,
`firstName` varchar(255) NOT NULL,
`JSON` TEXT NOT NULL,
PRIMARY KEY(_id),
CONSTRAINT uc_people_2nd UNIQUE (lastName, firstName)
) ENGINE = INNODB;
Run Code Online (Sandbox Code Playgroud)

这适用于SQL Fiddle.

请注意,您不必为名称指定唯一约束.您也可以删除constraint关键字,以便以下工作正常:

UNIQUE (lastName, firstName)
Run Code Online (Sandbox Code Playgroud)

编辑:

此处text数据类型在其他"大对象"页面上进行了描述.这些是任意长的特殊类型(想想兆字节).它们在索引中使用时有限制.特别是,它们需要长度前缀.因此,您无法声明列是唯一的.只有它们在前N个字符(最多约1000个)中是唯一的.text

对于名字来说,这有点过分.MySQL支持各种类型的字符串类型.最有用的是varchar().这些适用于名称字段.它们可以轻松地与索引一起使用.MySQL支持丰富的功能.

换句话说,如果你不知道是什么text,你就不需要它.了解并使用varchar()char()(或nvarchar()nchar(),如果您需要国家字符集支持).忘掉了text.有一天,如果你需要它,你会重新发现它.