首页 > 解决方案 > 存储过程不更新表格内容

问题描述

我在练习 MariaDB 存储过程。我创建了一个简单的存储过程,它应该更新表中的一行,但它不会更新它。

USE testdb;
CREATE TABLE IF NOT EXISTS games_status (player_1 VARCHAR(30), player_2 VARCHAR(30), player_3 VARCHAR(30), player_4 VARCHAR(30), player_5 VARCHAR(30), player_6 VARCHAR(30), game_room INT);
INSERT INTO games_status (game_room) VALUE (1);

DELIMITER $$
CREATE PROCEDURE new_player(in_name VARCHAR(30), in_game_room INT)
BEGIN
    DECLARE var_player_1 VARCHAR(30);
    DECLARE var_player_2 VARCHAR(30);
    DECLARE var_player_3 VARCHAR(30);
    DECLARE var_player_4 VARCHAR(30);
    DECLARE var_player_5 VARCHAR(30);
    DECLARE var_player_6 VARCHAR(30);
    
    SELECT player_1, player_2, player_3, player_4, player_5, player_6
        INTO var_player_1, var_player_2, var_player_3, var_player_4, var_player_5, var_player_6
        FROM games_status
        WHERE game_room = in_game_room;
    
    IF var_player_1 = NULL THEN
        UPDATE games_status
        SET
            player_1 = in_name
        WHERE
            game_room = in_game_room;
    END IF;
END $$
DELIMITER ;

当我跑

CALL new_player("Tom", 1);
SELECT * FROM games_status;

我明白了

+----------+----------+----------+----------+----------+----------+-----------+
| player_1 | player_2 | player_3 | player_4 | player_5 | player_6 | game_room |
+----------+----------+----------+----------+----------+----------+-----------+
| NULL     | NULL     | NULL     | NULL     | NULL     | NULL     |         1 |
+----------+----------+----------+----------+----------+----------+-----------+

所以player_1与其说是Tom,不如说是NULL。我在哪里做错了?
mariadb 版本是 10.4.13
谢谢

标签: sqlstored-proceduresmariadb

解决方案


推荐阅读