刚刚开始自学mysql的小白,对着教科书边学边敲,结果刚刚进行到insert into语句就把我搞晕了,求助论坛各位前辈。多谢啦!create TABLE section (
                  course_id varchar(8),
                  sec_id varchar(8),
                  semester varchar(6),
                  year numeric (4,0),
                  building varchar(15),
                  room_number varchar(7),
                  time_slot varchar(4),
                  PRIMARY KEY (course_id,sec_id,semester,year));之后我进行插入值操作
insert into section values('BIO-101','1','Summer','2009','Painter','514','B');
第一条插入成功,我就继续进行后续值的插入
insert into section values('BIO-301','1','Summer','2010','Painter','514','A');
就出现了错误,报错ERROR 1062 (23000):Duplicate Entry '1' for key 'sec_id'。
后面的元组不管输入什么值,只要是sec_id值是1,就一直报错。我在网上搜索,没有找到答案,希望前辈能指点我一下,都是主码,为什么就是sec_id不允许重复呢?谢谢大家

解决方案 »

  1.   

    贴出 show create table section ; 的结果。
      

  2.   

    | section | CREATE TABLE `section` (
      `course_id` varchar(8) NOT NULL DEFAULT '',
      `sec_id` varchar(8) NOT NULL DEFAULT '',
      `semester` varchar(6) NOT NULL DEFAULT '',
      `year` decimal(4,0) NOT NULL DEFAULT '0',
      `building` varchar(15) DEFAULT NULL,
      `room_number` varchar(7) DEFAULT NULL,
      `time_slot_id` varchar(4) DEFAULT NULL,
      PRIMARY KEY (`course_id`,`sec_id`,`semester`,`year`),
      UNIQUE KEY `course_id` (`course_id`),
      UNIQUE KEY `sec_id` (`sec_id`),
      UNIQUE KEY `semester` (`semester`),
      UNIQUE KEY `year` (`year`),
      CONSTRAINT `course_id` FOREIGN KEY (`course_id`) REFERENCES `course` (`course_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
    谢谢~
      

  3.   

     UNIQUE KEY `sec_id` (`sec_id`),
    --------------------------- 你设置了唯一 KEY 啊,当然不能再 insert 相同的值了
      

  4.   

    UNIQUE KEY `course_id` (`course_id`),
      UNIQUE KEY `sec_id` (`sec_id`),
      UNIQUE KEY `semester` (`semester`),
      UNIQUE KEY `year` (`year`),
    这些在你顶楼的CREATE TABLE语句中没有啊? 谁偷偷给你加上的?去掉即可。
      

  5.   


    啊,我想起来了,这个属性做了另一个表的外键我刚开始按照书上的代码一点点敲进去,结果总是设置不成功外键,忘记在哪个页面搜到,需要设置UNIQUE才能设置成功外键,我就设成了UNIQUE,果然外键是成功了,现在insert又出现问题我搜到用  alter TABLE section DROP INDEX sec_id; 语句去除UNIQUE属性,结果又报错了~~~~(>_<)~~~~  ERROR 1553 (HY000):Cannot drop index 'sec_id' ; needed in foreign key constraint;
      

  6.   


    多谢指正~~~~(>_<)~~~~ 结果我的UNIQUE外键还不能被删了,我好像做了好多无用功
      

  7.   

    Cannot drop index 'sec_id' ; needed in foreign key constraint;错误提示很清楚了, 如果英文不方便,可以先到百度中翻译一下。
      

  8.   


    多谢指正~~~~(>_<)~~~~ 结果我的UNIQUE外键还不能被删了,我好像做了好多无用功
    ALTER TABLE mytable DROP FOREIGN KEY sec_id
      

  9.   


    实在不好意思啊,英文的话没问题,“因为被设置为外键所以不能删除sec_id”,我不是很懂,我很困惑的是接下来该怎么做呢?不允许我删除外键,那是要改变另一个表的结构么?
      

  10.   


    我又用show create table查了一下别的表,发现一个teaches表和section表外键关联| teaches | CREATE TABLE `teaches` (
      `id` varchar(5) NOT NULL DEFAULT '',
      `course_id` varchar(8) NOT NULL DEFAULT '',
      `sec_id` varchar(8) NOT NULL DEFAULT '',
      `semester` varchar(6) NOT NULL DEFAULT '',
      `year` decimal(4,0) NOT NULL DEFAULT '0',
      PRIMARY KEY (`id`,`course_id`,`sec_id`,`semester`,`year`),
      KEY `course_id_t` (`course_id`),
      KEY `sec_id` (`sec_id`),
      KEY `semester` (`semester`),
      KEY `year` (`year`),
      CONSTRAINT `course_id_sec` FOREIGN KEY (`course_id`) REFERENCES `section` (`course_id`),
      CONSTRAINT `course_id_t` FOREIGN KEY (`course_id`) REFERENCES `section` (`course_id`),
      CONSTRAINT `id` FOREIGN KEY (`id`) REFERENCES `instructor` (`id`),
      CONSTRAINT `sec_id` FOREIGN KEY (`sec_id`) REFERENCES `section` (`sec_id`),
      CONSTRAINT `semester` FOREIGN KEY (`semester`) REFERENCES `section` (`semester`),
      CONSTRAINT `year` FOREIGN KEY (`year`) REFERENCES `section` (`year`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |实在不好意思,能不能讲解一下我接下来该怎么办啊。。
      

  11.   


    多谢指正~~~~(>_<)~~~~ 结果我的UNIQUE外键还不能被删了,我好像做了好多无用功
    ALTER TABLE mytable DROP FOREIGN KEY sec_id多谢~~我刚才用了一下,mysql> alter table section drop foreign key sec_id;
    ERROR 1091 (42000): Can't DROP 'sec_id'; check that column/key exists
    奇了怪了啊,sec_id明明存在的,为什么它说不存在呢
      

  12.   


    多谢指正~~~~(>_<)~~~~ 结果我的UNIQUE外键还不能被删了,我好像做了好多无用功
    ALTER TABLE mytable DROP FOREIGN KEY sec_id多谢~~我刚才用了一下,mysql> alter table section drop foreign key sec_id;
    ERROR 1091 (42000): Can't DROP 'sec_id'; check that column/key exists
    奇了怪了啊,sec_id明明存在的,为什么它说不存在呢(sec_id), 要括起来
      

  13.   


    多谢指正~~~~(>_<)~~~~ 结果我的UNIQUE外键还不能被删了,我好像做了好多无用功
    ALTER TABLE mytable DROP FOREIGN KEY sec_id多谢~~我刚才用了一下,mysql> alter table section drop foreign key sec_id;
    ERROR 1091 (42000): Can't DROP 'sec_id'; check that column/key exists
    奇了怪了啊,sec_id明明存在的,为什么它说不存在呢(sec_id), 要括起来可能是我这个版本不对吧,error 1064,说我语法错误