为什么主键没有递增ON DUPLICATE?

时间:2016-04-15 20:40:58

标签: mysql

我有以下具有以下架构的TEACHER表:

create table TEACHER
(
   TEACHERID            int not null auto_increment,
   FIRST_NAME           varchar(20) not null,
   SURNAME              varchar(20) not null,
   primary key (TEACHERID)
);

我有多个具有相同名字和教师姓氏的插页,我希望省略。给出了模式,我不打算对其进行修改。

我尝试在我的程序中动态执行以下查询但是TEACHERID没有递增,实际上没有添加具有新名字和姓氏的新字段,只有一个字段不断更新。

这是我的问题:

INSERT INTO TEACHER set ? ON DUPLICATE KEY UPDATE FirstName = ?, LastName = ?'
?

定义如下:values: [set, professor.name, professor.sname ] 其中一个集定义如下:

set = {
         FirstName: professor.name,
         LastName: professor.sname
       }

如何在不重复添加副本的情况下获取每个副本的主键?

谢谢

1 个答案:

答案 0 :(得分:1)

由于您正在使用ON DUPLICATE KEY UPDATE,您将获得该行为。如果您确实要插入重复记录,则只需执行INSERT语句,如

INSERT INTO TEACHER VALUES('test','test')
  

如何在没有重复的情况下获取主键   实际上添加了副本?

很抱歉,至少auto increment是不可能的。然后,您必须拥有自己的主键,并在每个插件上通过before insert触发器进行一些操作。像

这样的东西
create table TEACHER
(
   TEACHERID int not null primary key,

create trigger trg_binsert
on TEACHER before insert
for each row
begin
if(new.FIRST_NAME = FIRST_NAME and new.SURNAME = SURNAME)
update TEACHER 
SET TEACHERID = TEACHERID + 1
WHERE new.FIRST_NAME = FIRST_NAME 
and new.SURNAME = SURNAME;
end if
end

虽然,不确定为什么要这样做,也不会推荐。