Вы можете присоединить событие к элементу при динамическом создании с помощью jQuery(html, attributes)
.
Начиная с jQuery 1.8, любой метод экземпляра jQuery (метод
jQuery.fn
) можно использовать как свойство объекта, переданного второму параметру:
function handleDynamicElementEvent(event) { console.log(event.type, this.value) } // create and attach event to dynamic element jQuery("
Перво-наперво: студент не должен быть в состоянии записаться несколько раз на один и тот же курс + нет смысла, чтобы студент записывался ни на какой курс или нулевой студент записывался на курс (если у вас нет веских причин для она).
UNIQUE
+ NOT NULL
подлежит определению. Давайте использовать primary key
.
create table enrollment (
student integer references students(id),,
course varchar(6) references courses(num),
PRIMARY KEY (student, course)
);
С точки зрения нормализации БД ваш подход не годится: enrolled
не зависит (только) от ключа.
Лучшее решение - вычислить его:
SELECT courses.*,
(SELECT COUNT(*) FROM enrollment WHERE enrollment.course = courses.num) AS enrolled
FROM courses
В качестве альтернативы, вы можете вставить и обновить таблицу в 1 выражении:
WITH InsertStatement AS (
INSERT INTO enrollment VALUES(1, 'CS1501')
RETURNING course
)
UPDATE courses
SET enrolled = enrolled + AddedStudents
FROM (SELECT course, count(*) AS AddedStudents FROM InsertStatement GROUP BY course) Aux
WHERE courses.num = Aux.course
Я могу немного рассказать о почему ваш триггер не работает.
Поведение по умолчанию для триггера должно выполняться после каждого оператора. Ваш код требует указания FOR EACH ROW
.
Переопределите свой триггер и посмотрите, решит ли он вашу проблему. Тем не менее, я НЕ гарантирую, что это будет работать с одновременными вставками (именно поэтому 80% моего ответа о том, чтобы избежать использования триггера).