4

次のようなmySqlストアドプロシージャがあります--

delimiter |
create procedure GetEmployeeById(in ID varchar(45))
begin
  select id,
      firstName,
      lastName,
      phone,
      address1,
      address2,
      city,
      state,
      zip,
      username,
      password,
      emptypeid
  from myschema.tblemployees t
  where
      t.id=ID limit 1;
end |
delimiter;

制限1が設定されていない場合は、常にテーブル内のすべての行が返されます。各レコードのID値はIDパラメーターに設定されています。id = IDだけを使用できないのはなぜですか?また、使用するとすべてのレコードが返されるのはなぜですか?制限1を使用することの意味は何ですか?なぜ私は土曜日の夜にプログラミングしているのですか?

4

2 に答える 2

9

なぜなら、それはt.idをそれ自体と比較しているからです。これは常に真です。正式なパラメータを別の名前で呼び出します。

于 2008-12-20T22:48:36.143 に答える
4

MySQL の列名は、大文字と小文字が区別されません。idクエリの列はという名前のパラメーターを非表示IDにしているため、where句は実際には 2 つの異なる式を使用して同じ列を参照しています。もちろん、列の値は常にそれ自体と等しいため、すべてのレコードが一致します。入力パラメーターに別の名前を使用してください。

于 2008-12-20T23:16:20.347 に答える