我有以下触发器:
begin
insert into user_has_competence (user_id,competence_id)
select u.id,c.id from competence c
join user u on u.organization_id = c.organization_id and c.organization_id = new.organization_id;
end
所涉及的表格如下:
Table: competence
Columns:
id int(11) AI PK
name varchar(400)
organization_id int(11)
competence_type_id int(11)
competence_category_id int(11)
Table: user
Columns:
id int(11) AI PK
username varchar(100)
password varchar(100)
is_active int(11)
user_type_id int(11)
token varchar(445)
organization_id int(11)
title_id int(11)
image_path varchar(100)
division_id int(11)
Table: user_has_competence
Columns:
user_id int(11) PK
competence_id int(11) PK
competence_level_id int(11)
progression varchar(45)
id int(11) AI PK
现在我有8个用户,当我插入64 competence
时,我最终将超过30k行插入user_has_competence
有人能告诉我为什么会这样吗?
更准确地说,它会插入626433行。
答案 0 :(得分:1)
看起来用户每个组织只能拥有一个权限?如果是这样,我建议在user_id, competence_id, organisation_id in user_has_competence
表上使用复合PK。 (你需要在那里添加organisation_id)。然后,当触发器尝试插入重复值时,您会看到错误
编辑:问题的一部分可能是你的触发器不包括你刚插入的新能力_id的where子句,所以它会为所有现有的用户能力关系添加重复
答案 1 :(得分:0)
无论如何......一个猜测......
插入到user_has_competence
时会触发,当插入一行时,会在同一个表中插入并插入更多行,从而触发该触发器的另一个实例。而且这种情况一直持续下去。直到你的空间不足。
(这可以解释为什么你看到了30k行然后626k行;现在更多了吗?)
由于user_has_competence
上的主键是自动增量,因此不会阻止您插入重复的行......