2013-02-27 68 views
0

我有幾個問題我不確定的和將是一個很大的幫助,如果有人可以幫助我MySQL的交易成功表鎖,最後插入

1)我想回到我的代碼,用戶成功插入進入數據庫它也沒有失敗。我是否會按照如果Last_Insert_id不爲空來執行此操作?返回一條消息說插入。

2)將last_isert_id特定於插入的用戶,即一次插入一個插入。我需要做一個鎖來實現這一點。即如果我有一個配置文件表的例子,我得到了last_isert_id,我可以保證,如果很多ppl都立即註冊,每個用戶的id都是。或者我需要做表鎖定。

其他任何反饋改進方面最歡迎

BEGIN

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 

回答

0
  1. 您可以使用SELECT @@warning_count;SELECT @@error_count;INSERT後,看它是否成功。我是的,它會返回0行。

  2. last_insert_id()僅限於當前連接,因此無論數據庫有多少併發連接,您都將始終獲得正確的值。

+0

我想確保所有表已成功更新我是否需要SELECT @@ warning_count後每個表 – 2013-02-27 22:55:17

+0

您大多會感興趣的錯誤。插入成功時引發警告,但有些數據被截斷。無論如何,是的,每次查詢後都會進行檢查。這就是你在使用編程語言驅動時的工作方式(除非你通常可以自動執行該過程),所以在處理原始SQL時也是如此。 – Mchl 2013-02-27 23:08:09