MySQL 程序不适用于 select 和删除

MySQL procedure not working with both select and delete

我创建了一个程序,使用输入的车辆编号从车辆 table 获取车辆 ID,然后删除该车辆 ID 的预订记录,最后删除车辆 [=16] 中的条目=]...但是在创建过程时,我在第 7 行收到一个错误,说 Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 7 请帮助我确定问题... 提前致谢

CREATE PROCEDURE `DeleteVehicleWithBookings`(IN vehicleNo VARCHAR(10))
BEGIN

    #get vehicle id
    select @vid = vehicleID
    from vehicle
    where vehicle_no = vehicleNo;

    #delete booking
    delete from booking where vehicleID = vid;
    
    #delete vehicle
    delete from vehicle where vehicle_no = vehicleNo;
END 
DELIMITER ;

首先,我建议您为参数添加前缀,以便更清楚地将它们与列名区分开来。

那么,你没有正确分配和使用变量。所以,你的意图更像是这样:

CREATE PROCEDURE `DeleteVehicleWithBookings`(
    IN in_vehicleNo VARCHAR(10)
)
BEGIN
    #get vehicle id
    select @vid := vehicleID
    from vehicle
    where vehicle_no = in_vehicleNo;

    #delete booking
    delete from booking where vehicleID = @vid;
    
    #delete vehicle
    delete from vehicle where vehicle_no = in_vehicleNo;
END 
DELIMITER ;

前两个语句可以不用变量来写,但是:

#delete booking
delete b from booking b
    where b.vehicleID = (select v.vehicleID
                         from vehicle v
                         where v.vehicle_no = in_vehicleNo
                        );

而且,您或许可以定义一个级联删除外键约束并完全消除存储过程。