【问题标题】:MySQL procedure not working with both select and deleteMySQL 过程不能同时使用 select 和 delete
【发布时间】:2021-10-26 19:14:47
【问题描述】:

我创建了一个过程,使用车辆编号输入从车辆表中获取车辆 ID,然后删除该车辆 ID 的预订记录,最后删除车辆表中的条目......但是在创建过程时我在第 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 ;

【问题讨论】:

  • 1) SET @vid = vehicleID .... 2) where vehicleID = @vid;

标签: mysql sql select procedure


【解决方案1】:

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

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

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
                        );

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

【讨论】:

    猜你喜欢
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多