2010-12-16 49 views
1

我有这个表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查询以查看一行是否已经存在的唯一方法?

回答

1

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