如何使用存储过程进行更新、删除和 select?

how to do an update, delete and select using Stored Procedure?

当我尝试使用更新、删除或 select 时,代码会执行所有行中的命令。

更新示例

   DELIMITER $$
CREATE PROCEDURE update_cinema
(IN NOME_FANTASIA varchar(100), IN LOGRADOURO varchar(100),IN CIDADE varchar(100), IN ESTADO varchar(100),IN LOTACAO int, in ID_CINEMA int)
BEGIN
UPDATE tb_cinema
SET NOME_FANTASIA = nome_fantasia , LOGRADOURO=LOGRADOURO, CIDADE= cidade, ESTADO= estado, LOTACAO= lotacao
WHERE id_cinema = id_cinema;
END $$
DELIMITER ;

CALL UPDATE_CINEMA ('Muda', 'Por favor', 'da certo', 'MS', 400, 16)

The update executes in 16,17 and 18 instead of only in 16

Select 例子

    DELIMITER $$
CREATE PROCEDURE SELECT_cinema
(IN NOME_FANTASIA varchar(100))
BEGIN
SELECT * from tb_cinema
 where nome_fantasia = nome_fantasia;
END $$
DELIMITER ;

It is selecting all rows instead of the row that i choose

删除示例

DELIMITER $$
CREATE PROCEDURE DELETE_CINEMA
(IN NOME_FANTASIA varchar(100))
BEGIN
DELETE  from tb_cinema
 where nome_fantasia = nome_fantasia;
END $$
DELIMITER ;

call DELETE_cinema ('test_Select')

It is deleting all rows

您需要提供与实际列名称不同的参数名称。否则,名称是指参数还是列名是不明确的。因此,where 条件变为 no-ops,就像 set 赋值一样。

这是更新过程的示例。我在所有参数名称前加上 p_ 前缀以消除歧义:

create procedure update_cinema(
    in p_nome_fantasia varchar(100), 
    in p_logradouro varchar(100),
    in p_cidade varchar(100), 
    in p_estado varchar(100),
    in p_lotacao int, 
    in p_id_cinema int
)
begin
    update tb_cinema
    set 
        nome_fantasia = p_nome_fantasia, 
        logradouro = p_logradouro, 
        cidade = p_cidade, 
        estado = p_estado, 
        lotacao = p_lotacao
    where id_cinema = p_id_cinema;
end $$
delimiter ;