MySQL在空列上的唯一行为

MySQL在空列上的唯一行为,mysql,Mysql,我有这张桌子 CREATE TABLE IF NOT EXISTS `profile_connections` ( `id` int(11) NOT NULL auto_increment, `profile_id` int(11) NOT NULL, `connection_profile_id` int(11) NOT NULL, `created` timestamp NOT NULL default CURRENT_TIMESTAMP, `deleted` times

我有这张桌子

CREATE TABLE IF NOT EXISTS `profile_connections` (
  `id` int(11) NOT NULL auto_increment,
  `profile_id` int(11) NOT NULL,
  `connection_profile_id` int(11) NOT NULL,
  `created` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `deleted` timestamp NULL default NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `profile_id_2` (`profile_id`,`connection_profile_id`,`deleted`),
  KEY `profile_id` (`profile_id`,`connection_profile_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
我的列上有一个唯一的(配置文件id、连接配置文件id、已删除)

现在,我们希望能够使用 将忽略插入配置文件\连接集配置文件\ id=2,连接\配置文件\ id=3

如果一行的值profile\u id=2、connection\u profile\u id=3和deleted=null,我希望数据库“忽略”插入

但是该表不认为“deleted=null”是相同的值,因此可以存在多个具有null值的行

有没有办法使这张桌子按我的要求工作。
或者是创建SELECT查询以查看行是否已经存在的唯一方法???

显然,这是InnoDB中的设计。这里有一个答案:


我相信他们建议您可以使用自定义值(如99999999)而不是空值。或者可能是-1?

这可能不是您想要做的,但显而易见的解决方案是不使用可为空的列。创建一个单独的已删除列,该列为布尔值/tinyint to,带有false/0,以指示该行未被删除,或者在未删除行的已删除时间戳中使用默认时间

id | profile_id | connection_profile_id | created             | deleted
2  | 4          | 3                 | 2010-12-16 10:34:46 | NULL
3  | 4          | 3                 | 2010-12-16 10:34:53 | NULL