2017-07-29 17 views
0

電子メールが存在しない場合にのみユーザーをユーザーテーブルに挿入しようとしています。レコードが存在しない場合にのみテーブルに挿入する

CREATE TABLE `users` ( 
`ID` INT(8) NOT NULL AUTO_INCREMENT , 
`FIRSTNAME` VARCHAR(150) NOT NULL , 
`LASTNAME` VARCHAR(150) NOT NULL , 
`EMAIL` VARCHAR(150) NOT NULL , 
`PASSWORD` VARCHAR(150) NOT NULL , 
PRIMARY KEY (`ID`(8)), 
UNIQUE (`EMAIL`) 
) ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_bin; 

、私はこのクエリを実行しています:

SET @P1 = 'john'; 
SET @P2 = 'smith'; 
SET @P3 = '[email protected]'; 
SET @P4 = 'password'; 

私はUSERS_INSERT_NEWは声明で次のように動作するかどうか、それは単にusersテーブル

SELECT IF (NOT EXISTS (SELECT `ID` FROM `users` WHERE `EMAIL` = '[email protected]'), CALL USERS_INSERT_NEW (@P1, @P2, @P3, @P4) , NULL) INSERTED 

への挿入を行うストアドプロシージャであります IF(expression、valid、invalid)なぜ検証したらストアドプロシージャを使用できないのですか?

+0

から* expr2またはexpr3の1つのみが明示的にNULLの場合、IF()関数の結果の型はNULL以外の式の型です* –

+0

'最初にチェックしてください'。挿入だけを実行してください。 – Strawberry

答えて

0

はさらに、ストアドプロシージャについて読んだ後、私は文場合のみMySQLでのストアドプロシージャの内部で働くことが分かっています。私は非常に使いやすいSQLのバックグラウンドで来ています。とにかく私は、ユーザーのテーブルからこの電子メールに関連付けられているユーザーのIDを選択してこの問題を解決した場合、私は電子メールが存在することをユーザーに警告し、そうでなければデータベースにレコードを挿入します。

関連する問題