我正在寻找防止基于另一个数据点的表中出现重复数据的最佳方法。
表:(两个实体(个人和学校)之间的连接表)
用_school创建表(
person_id 整数非空,
school_id 整数非空,
type_id 整数非空,
主键(人物 ID、学校 ID)
);
person_id
和 school_id
也是外键,在不同的语句中声明。
我想要的是防止一个人多次添加同一所学校。
示例:
第 1 行:
person_id = 1
school_id = 1
第 2 行:
person_id = 1
school_id = 2
没问题,但是:
第 1 行:
person_id = 1
school_id = 1
第 2 行:
person_id = 1
school_id = 1
不是。
防止此类重复的最简单方法是什么?
我尝试过使用触发器,但无法使其按照我想要的方式工作:
用_school更改表
添加检查(
学校 ID != (
选择学校 ID
来自学校
其中 person_id = person_id
)
);
(我无法区分最初的 person_id 和它正在检查的 person_id)
最佳答案
您可以尝试在数据库级别创建唯一性......例如:
ALTER TABLE with_school ADD UNIQUE uniqueindex (person_id, school_id);
而且...可能此外...您可以在插入之前在应用程序级别执行 sql select“检查”,以确保您还没有这两个键。
关于mysql - 防止基于另一个值 SQL 重复值的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27785846/