我有一个现有的mysql表,我想设置一个字段(varchar),使其必须是唯一的或空的(默认情况下)。因此,当用户未输入值时,其为空,否则用户必须输入唯一值。
我该怎么做?
答案 0 :(得分:1)
根据我的阅读标准,不应该在表中有一个允许空值的列并且具有唯一约束;如果是的话,它归结为一个特殊的mysql引擎(这将导致其他地方的不可预测/意外行为也是imho)
此外,您的问题似乎与此相反。
然而,您可以使用触发器强制执行此操作,您可以在插入/更新时编写触发器以检查该值是否已存在,并立即删除它。
答案 1 :(得分:1)
MySQL包含一个约束类型UNIQUE
,允许这样做。如果您声明列UNIQUE
并允许其中包含NULL
值,则所有值都将被强制为唯一,除非它们是NULL值。如果要防止存储空字符串(''
),则必须在代码级别对其进行管理,因为MySQL会将其视为另一个字符串并在UNIQUE
列中允许它一次。如果没有值传递给这样的列,它将自动默认为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,
[...]
)
答案 2 :(得分:0)
我认为您在传递给mysql之前更好地处理数据,或者不是,您可以在更新表时编写触发器触发器,以确保它通过您的规则