MySQL中的NULL列
问题描述:
我有这个表MySQL中的NULL列
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 ;
我有一个独特的对我的专栏(PROFILE_ID,connection_profile_id,删除)
现在希望能够使用 INSERT忽略独特的行为INTO profile_connections SET profile_id = 2,connection_profile_id = 3
而且我希望数据库“忽略”插入,如果一行已经存在与值profile_id = 2,connection_profile_id = 3和删除= null
但该表不会看到“deleted = null”为相同的值,因此多行可以与null值一起存在。
像
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
有没有无论如何做,因为我想表工作。 或者是首先创建一个SELECT查询以查看一行是否已经存在的唯一方法?
答
它可能不是你想要做的,但显而易见的解决方案是不使用NULLable列。创建一个单独的删除列,该列是一个布尔值/ tinyint,使用false/0表示该行未被删除,或者在已删除的时间戳中为未删除的行使用默认时间。
答
显然,这是在InnoDB中设计的。这里有一个答案:http://forums.mysql.com/read.php?22,53591,53975#msg-53975。
我相信他们建议你可以使用自定义值(如999999999)而不是NULL。或者也许是-1?