我怎样才能确保我只在mysql中插入一行theese特定的特性属性?

时间:2015-03-18 21:06:17

标签: mysql sql concurrency foreign-keys unique

在以下数据库布局中:

  • 同一主题可以有多个课程
  • 学生可以参加多门课程

我想确保学生只参加同一科目的一门课程。

我不想确保100%的一致性,我担心并发问题。

这意味着我可以使用表/行锁定解决方案,并且不需要模拟唯一键约束的触发器。

db diagram

当然我可以将subject_id添加到关系中并创建一个唯一的键,但是我会将它冗余地存储在我不想要的地方。

2 个答案:

答案 0 :(得分:0)

我不知道我的问题是否正确,但如果我这样做,这就是我的答案:

id移除student_course_relation列,并将primary key放在id_studentid_course上。

这样,只有这些组合需要是唯一的。

答案 1 :(得分:0)

经过一些研究后,我发现我的问题的一个有希望的解决方案是在MySql中使用GET_LOCK()函数

http://dev.mysql.com/doc/refman/4.1/en/miscellaneous-functions.html#function_get-lock

要获取连接中学生ID特定名称的锁定,然后选择课程,执行插入操作。 第二个连接必须等待同一个锁,然后选择课程ID将返回id。