mysql唯一列不接受空值

时间:2014-04-15 07:04:53

标签: mysql

我有两列唯一的电子邮件和serverip,但是当我尝试仅在没有serverip的情况下在电子邮件中插入数据时,它会引发错误Duplicate entry '' for 'serverip'

我尝试制作电子邮件和serverip DEFAULT NULL但是如果我尝试只插入一个colum电子邮件,它仍然会引发错误。

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(16) NOT NULL AUTO_INCREMENT,    
  `email` varchar(55) DEFAULT NULL,
  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `cname` varchar(55) NOT NULL,
  `serverip` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`),
  UNIQUE KEY `serverip` (`serverip`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;

我该怎么做?

1 个答案:

答案 0 :(得分:1)

  

将电子邮件发送到NOT NULL,将serverip发送到DEFAULT NULL,现在当我尝试将数据插入到电子邮件中时,它会抛出serverip上的错误重复条目

这是因为serverip字段定义为包含default null 除此之外,该字段也是unique

unique字段的生命周期只能包含一次特定值。

当您在insert语句中避开该字段时,default子句将会出现,并且引擎将尝试分配default null值为了这个领域。

但由于该字段在表格中已有NULL条目,因此无法接受另一个相同的值,因为它必须在unique字段数据上保持serverip

因此你得到了错误。

如果您仍希望在unique数据上保留serverip,以某种方式允许空白,则必须

  • 删除unique约束。
  • 定义before insert/update trigger以检查是否有此值 已经存在与否。
  • 如果空白,请接受,否则一式两份限制。