我有兩個表:
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');
我想創建一個程序,它在用戶表中插入一個用戶,使用:
- id 是自動遞增的。
- email 等于 email 引數。
- userTypeId 是 type 屬性等于 type 引數的 userTypes 行的 id
該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', '[email protected]');
CALL insertUser('paid', '[email protected]');
SELECT * FROM users;
id email userTypeId
------------------------------------------
1 name_1@mail.com 0
2 name_2@mail.com 1
uj5u.com熱心網友回復:
省去 auto_increment 列。顧名思義,資料庫會自動填充它。
然后,為引數使用與列名稱不同的名稱。您可以在引數中使用前綴。
此外,您可以考慮使用userTypeId
整數值作為引數而不是文本值。否則,您需要處理傳遞的型別不在userTypes
(創建新的/拒絕插入)中的型別的情況。
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 ;
uj5u.com熱心網友回復:
像這樣的事情可能會奏效。
INSERT INTO users(email, userTypeID)
VALUES(@email, (SELECT userTypeId from UserTypes WHERE usertypes.type = type));
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/362093.html