MySql事务成功表锁定,上次插入

时间:2013-02-27 22:39:11

标签: mysql

我有一些我不确定的问题,如果有人可以帮助我,那将是一个很大的帮助

1)我想回到我的代码,用户成功插入数据库,也没有失败。我是否会按照If Last_Insert_id不为空的方式执行此操作?返回一条说插入的消息。

2)last_isert_id将特定于插入的用户,即一次插入一次。我需要做一个锁来实现这一目标。即如果我有一个配置文件表,例如我得到了last_isert_id,我可以保证,如果有很多人一次性注册,每个用户都会有一个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

1 个答案:

答案 0 :(得分:0)

  1. 您可以在INSERT之后使用SELECT @@warning_count;SELECT @@error_count;来查看是否成功。我是的,它将返回0行。

  2. last_insert_id()仅限于当前连接,因此无论数据库有多少并发连接,您都将获得正确的值。