mysql - 防止基于另一个值 SQL 重复值的最佳方法

标签 mysql constraints duplicates duplicate-data

我正在寻找防止基于另一个数据点的表中出现重复数据的最佳方法。

表:(两个实体(个人和学校)之间的连接表)

用_school创建表( person_id 整数非空, school_id 整数非空, type_id 整数非空, 主键(人物 ID、学校 ID) );

person_idschool_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 AD​​D UNIQUE uniqueindex (person_id, school_id);

而且...可能此外...您可以在插入之前在应用程序级别执行 sql select“检查”,以确保您还没有这两个键。

关于mysql - 防止基于另一个值 SQL 重复值的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27785846/

相关文章:

mysql - SQL - 只允许插入三列之一(但必须设置一列)

mysql - 使用 mysqldump 忽略 mysql 数据库备份中的 'views'

haskell - 约束类型的同义词

php - Mysql 子/组条目自动递增

SQL 使用触发器进行约束

c - 将 C 代码移植到 ActionScript 2

python - 我试图在 pandas 中查看重复的行,但我得到的返回不是重复的?

python - 有效地平均 numpy 数组重复行

PHP/Ajax/jQuery数据提交方式

php - PDO lastInsertID() 由于在一次调用中运行多个查询而失败