Java 如何根据1 Select语句的结果有条件地执行Mysql insert语句
考虑我的Ajax调用在我解释问题的代码下面的样子:Java 如何根据1 Select语句的结果有条件地执行Mysql insert语句,java,mysql,triggers,Java,Mysql,Triggers,考虑我的Ajax调用在我解释问题的代码下面的样子: $.ajax({ type : "GET", url : "servlet", data: {course_name_param:selectedOption}, dataType:"json", success : function(data) {
$.ajax({
type : "GET",
url : "servlet",
data: {course_name_param:selectedOption},
dataType:"json",
success : function(data) {
$('#startDate').empty();
$('#startDate').append('<option value="">Select Start Date</option>');
$.each(data, function(index, jsonData) {
/*Here below is where I check availability*/
if(jsonData.students_registered < jsonData.max_size){
/*Display available courses*/
}
}
我有一个MySQL表,其中保存了有关教育课程的信息。其中1个字段在最大容量时可用
注册是一个insert语句。我需要通过检查插入时实际可用的插槽来控制这一点
目前,我使用对该表的Ajax调用执行检查。当多个用户在不到一分钟的时间内将页面加载到相对较近的位置时,检查是无用的
问题:
我如何在远离前端的情况下实现这一点
这是不是应该包含在包含我的逻辑的类中
插入语句
我不认为在这么多问题中会考虑这种情况,只是在避免重复条目的情况下,这不是我的情况
如有任何建议,将不胜感激
您可以简单地以这样一种方式构造您的查询,即您只回拉具有开放槽的课程。类似这样的事情可能会给你一个想法:
SELECT courses.title
FROM courses
WHERE students_registered < max_size
如果要确保对数据库进行验证,可以使用条件插入:
INSERT INTO enrollments(course_id, student_id)
SELECT <your course id>, <your student id> FROM dual
WHERE EXISTS (
SELECT * FROM courses
WHERE id = <your course id>
AND students_registered < max_size
)
用户插入的表上的插入前触发器。我采用了这种方法。然后在应用程序中处理SQLException:
CREATE DEFINER=`root`@`localhost` TRIGGER before_insert_registration
BEFORE INSERT ON registration
FOR EACH ROW
BEGIN
DECLARE num_rows INTEGER;
Declare x INTEGER;
SET x = NEW.course_id;
SELECT
COUNT(*)
INTO num_rows FROM courses
WHERE
course_id = NEW.course_id
AND maxsize > students_registered;
IF num_rows < 1 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Testing Custom Fail-Over';
END IF;
END
你在循环什么?@DrazenBjelovuk循环通过ajax调用返回的课程信息行。我认为你可以简单地在SQL查询中实现该条件,尽管我需要了解你的数据库模式以提供进一步的帮助。在用户尝试插入时可以进行此检查吗?当然,这就简单多了。我已经更新了答案。当我有机会测试这个问题时,我会更新你,现在我们处于活动状态,因此我没有更改的窗口。Drazen,选择返回20多行。请参阅我正在使用的选择:从dual WHERE EXISTS中选择2从course_id=2和students_registered