Если вы хотите иметь стабильные ID
, вам определенно нужно хранить их в таблице.
Вам нужно будет назначить новый последовательный ID
для каждого студента, который присоединяется к курсу, и просто удалить его, если он уходит, не касаясь других.
Если у вас есть параллельный доступ к вашим таблицам, не используйте MAX(id)
, так как два запроса могут выбрать один и тот же MAX(id)
перед вставкой в таблицу.
Вместо этого создайте отдельную таблицу, которая будет использоваться как sequence
, заблокируйте строку каждого курса с помощью SELECT FOR UPDATE
, затем вставьте ID
нового студента и обновите строку новым ID
в одной транзакции, как это:
Courses:
Name NextID
------- ---------
Math 101
Physics 201
Attendants:
Student Course Id
------- ------ ----
Smith Math 99
Jones Math 100
Smith Physics 200
BEGIN TRANSACTION;
SELECT NextID
INTO @NewID
FROM Courses
WHERE Name = 'Math'
FOR UPDATE;
INSERT
INTO Attendants (Student, Course, Id)
VALUES ('Doe', 'Math', @NewID);
UPDATE
Courses
SET NextID = @NewID + 1
WHERE Course = 'Math';
COMMIT;