CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cid` char(255) NOT NULL,
  `weibo_id` char(255) NOT NULL,
  `keyword_id` varchar(16) DEFAULT NULL,
  `keyword_sign` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `key_id` (`cid`,`weibo_id`,`keyword_id`,`keyword_sign`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8在执行:
insert into test set cid='aa', weibo_id='bb'; 的时候, 为什么 能不断的重复插入, 该怎么改这个表结构呢?

解决方案 »

  1.   

    select * from `test`  where cid='aa' and  weibo_id='bb'
    检查一下,应该是有重复记录了。
      

  2.   

    INNODB认为NULL是不相等的。
    复合键 如果其中的字段有null的话,即使其他的字段的值是相同的, 它也认为联合键值是不一样的所以你应该:
    insert into test set cid='aa', weibo_id='bb',weibo_id='',keyword_sign=''或者直接将后两个字段改为NOT NULL
      

  3.   

     可是有其他办法么?? 我也是这么弄的 但是合作的同事说要保持null
      

  4.   

    你的期望是什么? 希望表中存储完全相同的两条记录? 如果是这样,那就取消这个 unique key 
      

  5.   

    不是 我期望有字段为default null的 只要有记录的相同的是不能插入的
    现在是输入相同的, 
     `keyword_id` varchar(16) DEFAULT NULL,
      `keyword_sign` varchar(32) DEFAULT NULL,\
    这两个字段不赋值的话 , 一直都能插入相同的元素, 我现在不希望这样
      

  6.   

    左不是,右不是。
    那你再建立一个约束得了 
    UNIQUE KEY `key_id2` (`cid`,`weibo_id`)
      

  7.   

    这方法不行,MYSQL5.1没有表达式索引(不知高版本有没有),通过索引的方法无法约束你的问题,想其他方法吧