MySQL创建具有唯一约束的表

时间:2014-07-19 12:13:09

标签: mysql sql

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

这是我的错误:

  

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

这是我的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;

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

1 个答案:

答案 0 :(得分:9)

修复逗号并输入名称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;

这适用于SQL Fiddle

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

UNIQUE (lastName, firstName)

编辑:

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

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

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

相关问题