我有一个现有的 mysql 表,我想设置一个字段 (varchar),以便它必须是唯一的或为空(默认情况下)。因此,当用户不输入值时,其为空,否则用户必须输入唯一值。
我该怎么做?
最佳答案
MySQL 包含一个约束类型 UNIQUE
来实现这一点。如果您声明一个列 UNIQUE
并允许其中包含 NULL
值,则所有值都将被强制为唯一,除非它们是 NULL 值。如果你想防止存储空字符串 (''
),你必须在代码级别进行管理,因为 MySQL 会将其视为另一个字符串并允许在 中存储一次。 >唯一
列。如果没有值传递给此类列,它将自动默认为 NULL
,但您也可以在传递值之前以编程方式在代码中指定 NULL
(不带引号)到数据库。
在本文的其余部分中,我将假设表的名称为 tablename
,列的名称为 columnname
,varchar 字段的大小为 255
如果您想修改现有表,而不是创建新表:
如果该列尚不支持空值:
ALTER TABLE tablename ALTER COLUMN columnname VARCHAR(255) NULL
添加唯一约束:
ALTER TABLE tablename ADD CONSTRAINT un_tablename_column UNIQUE (columnname)`
(我总是命名我的约束,以便稍后可以具体引用它们)
或者,如果您想在新表上执行此操作:
CREATE TABLE tablename (
[...]
columnname varchar(255) UNIQUE NULL,
[...]
)
关于mysql - 修改表: only allow either unique or empty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18636133/