0

よくわからない質問がいくつかあります。誰かが私を助けてくれれば大きな助けになります

1)ユーザーがデータベースに正常に挿入されたこと、または失敗したことをコードに戻したいと思います。Last_Insert_idがnullでない場合の行に沿ってこれを行いますか? 挿入されたというメッセージを返します。

2) last_isert_id は、挿入されたユーザーに固有のものになります。つまり、一度に 1 つずつ挿入されます。これを達成するためにロックを行う必要がありますか。たとえば、プロファイル テーブルがあり、last_isert_id を取得した場合、多くのユーザーが一度にサインアップする場合、各 ID が各ユーザーに対応することを保証できます。または、テーブルのロックを行う必要がありますか。

改善の点で最も歓迎されるその他のフィードバック

始める

DECLARE _user_role_permission int;
DECLARE _user_id int;
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;

SET _user_role_permission = (SELECT id FROM user_role_permission WHERE role_permission = in_role_permission);

START TRANSACTION;

INSERT INTO user_site(username, email, status, password, password_strategy, salt, requires_new_password, reset_token,
                             login_time, lock_status, login_ip, created_ip, activation_key, validation_key,
                             create_time, update_time)
                  VALUES(in_username, in_email, in_status, in_password, 
                            in_password_strategy, in_salt, in_requires_new_password,
                             in_reset_token, in_login_time, in_lock_status, in_login_ip,
                             in_created_ip, in_activation_key, in_validation_key,
                             in_create_time, in_update_time);   

SET _user_id = LAST_INSERT_ID();                        

INSERT INTO user(user_site_id) VALUES(_user_id);

INSERT INTO user_permission(user_id, permission_id)VALUES (_user_id,_user_role_permission); 

COMMIT;

END
4

1 に答える 1

0
  1. を使用SELECT @@warning_count;SELECT @@error_count;INSERT、成功したかどうかを確認できます。はい、0行を返します。

  2. last_insert_id()は現在の接続に制限されているため、データベースへの同時接続の数に関係なく、常に正しい値を取得します。

于 2013-02-27T22:47:12.807 に答える