我有以下具有以下架构的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
}
如何在不重复添加副本的情况下获取每个副本的主键?
谢谢
答案 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
虽然,不确定为什么要这样做,也不会推荐。