2012-01-26 17 views
1

[OK]まず、私はmysqlの達人ではありません。第二に、私は検索しましたが、mysqlに関連するものは何も見ませんでした。私のDB知識は限られているので、2つの異なるデータベースタイプ間の構文上の違いを推測するだけではカードにはありません。ストアドプロシージャからストアドプロシージャを呼び出すまたはCOUNTを使用して

行を挿入する前に特定の値がすでにテーブルに存在するかどうかを確認しようとしています。私はこれについて、2つのストアドプロシージャを使用することにしました。最初:

CREATE PROCEDURE `nExists` (n VARCHAR(255)) BEGIN 
    SELECT COUNT(*) FROM (SELECT * FROM Users WHERE username=n) as T; 
END 

そして第二には:あなたが見ることができるよう

CREATE PROCEDURE `createUser` (n VARCHAR(255)) BEGIN 
    IF (nExists(n) = 0) THEN 
     INSERT INTO Users... 
    END IF; 
END 

だから、私はのcreateUserからnExistsを呼び出そうとしています。 nExistsという名前の関数が存在しないというエラーが表示されるのは、ストアドプロシージャだからです。私は違いが何であるか、あるいはそのような違いが必要な理由についてはっきりしていませんが、私はJava開発者です。多分、ここで巨大なDB関連の概念が欠けているかもしれません。

あなたは私を助けてくれますか? ありがとう

+3

「なぜユーザーからのSELECT COUNT(*)ユーザー名= n?」だけでなく、「(*ユーザーからのSELECT *ユーザー名= n)」という理由がありますか? – zerkms

+0

@zerkms err ... idk。私はあなたが何を得ているかを見ていると思う。私はそれを試みます。 –

+0

@zerkmsうん、うまくいった!そのコメントを回答として設定し、私はあなたに幸福の大きな緑色のチェックマークを付けます:) –

答えて

0

私は...

なぜSELECT COUNT(*) FROM (SELECT * FROM Users WHERE username=n)だけではなくSELECT COUNT(*) FROM Users WHERE username=nそれはあなたをどのように役立ったかわからないんだけど、?

0

インデックスはUNIQUEのユーザー名(またはプライマリアプリケーションのインデックスは何でも構いません)を作成してテストする必要はありません。新しいレコードを挿入してみてください。すでに存在する場合は、エラーを処理します。それが成功すれば、すべてが順調です。

これはすべて1つのストアドプロシージャである必要があります。

関連する問題