MySQL: insert procedure, with variable from another table

MySQL: insert procedure, with variable from another table

我有两个 table:

CREATE TABLE userTypes (
    id INTEGER NOT NULL PRIMARY KEY,
    type VARCHAR(50) NOT NULL
);

CREATE TABLE users (
    id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
    email VARCHAR(50) NOT NULL,
    userTypeId INTEGER NOT NULL,
    FOREIGN KEY (userTypeId) REFERENCES userTypes(id)
);
  
INSERT INTO userTypes (id, type) VALUES (0, 'free');
INSERT INTO userTypes (id, type) VALUES (1, 'paid');

我想创建一个过程,它在用户 table 中插入一个用户,其中:

INSERT 函数不适用于 WHERE,所以我尝试添加一个 UPDATE 但它不起作用。这是我目前拥有的:

DELIMITER //
CREATE PROCEDURE insertUser(
    IN type VARCHAR(50),
    IN email VARCHAR(50)
)
BEGIN
    INSERT INTO users(id, email, userTypeID) VALUES (LAST_INSERT_ID(), email, userTypeID);
    UPDATE users SET users.userTypeID = usertypes.id
WHERE usertypes.type = type;
END//
DELIMITER ;

预期的结果应该是这样的:

CALL insertUser('free', 'name_1@mail.com');
CALL insertUser('paid', 'name_2@mail.com');

SELECT * FROM users;


id    email                   userTypeId
------------------------------------------
1     name_1@mail.com         0
2     name_2@mail.com         1

省略 auto_increment-column。顾名思义,数据库会自动填充它。

然后,使用与列名称不同的参数名称。您可以在参数中使用前缀。

此外,您可以考虑使用 userTypeId 整数值而不是文本值作为参数。否则你需要处理传递的类型不在 userTypes 中的类型的情况(创建一个新的 one/reject 插入)。

DELIMITER //
CREATE PROCEDURE insertUser(
in_type VARCHAR(50),
in_email VARCHAR(50)
)
BEGIN

INSERT INTO users(email, userTypeID) 
SELECT in_email, id
FROM userTypes
WHERE type=in_type;

IF (ROW_COUNT()=0) THEN
  SELECT 'Error';
ELSE
  SELECT 'OK';
END IF;
  
END//
DELIMITER ;