私はこの仕事を望んでいます。
UserAccountテーブルが重複した場合、出力パラメータは-1を設定します。
UserInfoテーブルが重複している場合、Outパラメーターは-2となります。
すべての作業が成功すると、Out ParameterはLAST_INSERT_IDを挿入します。
Mysql重複するキーチェックで複数のテーブルを挿入するにはどうすればよいですか?
UserAccountの表
CREATE TABLE UserAccount (
SocialType ENUM('Google', 'Facebook'),
SocialID BINARY(16),
UserID INT UNIQUE NOT NULL AUTO_INCREMENT,
PRIMARY KEY(SocialType, SocialID)
);
UserInfoテーブル
CREATE TABLE UserInfo (
UserID INT,
Nickname VARCHAR(20) UNIQUE,
PRIMARY KEY(UserID),
FOREIGN KEY(UserID) REFERENCES UserAccount(UserID)
ON DELETE CASCADE,
);
私は、プロシージャ内の重複チェックにテーブルを挿入したいです。
しかし、それはうまく動作せず、効率が悪いようです。
DELIMITER $$
CREATE PROCEDURE usp_CreateNewUser(
socialType ENUM('Google','Facebook'),
socialID VARCHAR(100),
nickname VARCHAR(20),
OUT result INT)
Work:BEGIN
IF EXISTS(SELECT 1 FROM UserAccount WHERE SocialType = socialType AND SocialID = UNHEX(MD5(socialID)))
THEN
SET result = -1;
Leave Work;
END IF;
IF EXISTS(SELECT 1 FROM UserInfo WHERE Nickname = nickname)
THEN
SET result = -2;
Leave Work;
END IF;
INSERT INTO UserAccount() VALUE(socialType, UNHEX(MD5(socialID)), 0);
INSERT INTO UserInfo(UserID, Nickname) VALUE(LAST_INSERT_ID(), nickname);
SET result = LAST_INSERT_ID();
END $$
DELIMITER ;
この状況で私ができることは何ですか?
ありがとうございます。
重複行のトリガーですか? – sagi