我有这张桌子
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 IGNORE INTO profile_connections SET profile_id = 2,connection_profile_id = 3
如果已存在值为profile_id = 2,connection_profile_id = 3且deleted = 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查询以查看某行是否已存在的唯一方法??
答案 0 :(得分:1)
显然,这是InnoDB的设计。这是一个答案:http://forums.mysql.com/read.php?22,53591,53975#msg-53975。
我相信他们建议你可以使用自定义值(如999999999)而不是NULL。或者可能是-1?
答案 1 :(得分:1)
它可能不是您想要做的,但显而易见的解决方案是不使用NULLable列。创建一个单独的已删除列,它是boolean / tinyint,用false / 0表示该行未被删除,或者在删除的时间戳中使用默认时间表示未删除的行。