4

データベース内のすべてのテーブルからユーザー情報を削除する手順があります。

CREATE PROCEDURE `unrollme_version3`.`del_user` (in v_user_id int(10))
BEGIN
START TRANSACTION; 
    DELETE FROM user_table1 WHERE `user_id` = v_user_id;
    DELETE FROM user_table2 WHERE `user_id` = v_user_id;
    DELETE FROM user_table3 WHERE `user_id` = v_user_id;
COMMIT;
END

データベースの構造がどのように設定されているかに一致するように、何らかの方法で入力変数を符号なしのみにしたいです。これは可能であり、ベストプラクティスは何ですか。

4

2 に答える 2

6

単語を追加するだけunsignedです。関係ないという理由だけで削除しました(10)。表示される桁数を説明するだけですが、常に4バイトのintです。

CREATE PROCEDURE `unrollme_version3`.`del_user` (in v_user_id int unsigned)
BEGIN
START TRANSACTION; 
    DELETE FROM user_table1 WHERE `user_id` = v_user_id;
    DELETE FROM user_table2 WHERE `user_id` = v_user_id;
    DELETE FROM user_table3 WHERE `user_id` = v_user_id;
COMMIT;
END

警告の代わりにエラーを強制的にスローすることができます

SET sql_mode='STRICT_ALL_TABLES';

詳細については、マニュアルを参照してください。

于 2012-06-05T16:35:35.463 に答える
0

コードでv_user_idをネガティブとしてチェックインし、代わりにエラーを返すことができます。

CREATE PROCEDURE `unrollme_version3`.`del_user` (in v_user_id int(10))
BEGIN
if v_user_id < 0 then
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Invalid user_id passed';
end if;
START TRANSACTION; 
    DELETE FROM user_table1 WHERE `user_id` = v_user_id;
    DELETE FROM user_table2 WHERE `user_id` = v_user_id;
    DELETE FROM user_table3 WHERE `user_id` = v_user_id;
COMMIT;
END

符号なしの部分を編集しました。上記は、範囲外のデータが提供されたときにレイザーまたはシグナルを実行するための単なるSQLです。

于 2012-06-05T16:31:48.453 に答える