mysql表角色互斥_MySQL如何实现互斥访问,锁表?

由于在MySQL中没有类似Oracle的序列的概念,因此决定通过一个表和两个存储过程来模拟这个功能。

我希望来自不同服务器的连接调用时,会有同步功能。

Create Table tbSequence(Id Int Unsigned Not Null Auto_Increment Primary Key, SequenceName Varchar(50) Not Null, SequenceValue Bigint Not Null);

Delimiter ;

Drop Function If Exists `fnNextSequence`;

Delimiter ;;

Create Function `fnNextSequence`(

p_SequenceName Varchar(50)

) Returns Bigint

Begin

Declare v_Result Bigint Default Null;

-- Lock Tables tbSequence Write;

-- Set Autocommit = 0;

-- Start Transaction;

Select SequenceValue Into v_Result From tbSequence Where SequenceName = p_SequenceName;

If v_Result Is Not Null Then

Set v_Result = v_Result + 1;

Update tbSequence Set SequenceValue = v_Result Where SequenceName = p_SequenceName;

Else

Set v_Result = 1;

Insert Into tbSequence(SequenceName, SequenceValue) Values(p_SequenceName, v_Result);

End If;

-- Unlock Tables tbSequence;

-- Commit;

Return v_Result;

End;;

Delimiter ;

Drop Function If Exists `fnCurrentSequence`;

Delimiter ;;

Create Function `fnCurrentSequence` (

p_SequenceName Varchar(50)

) Returns Bigint

Begin

Declare v_Result Bigint Default Null;

-- Lock Tables tbSequence Write;

-- Set AutoCommit = 0;

-- Start Transaction;

Select SequenceValue Into v_Result From tbSequence Where SequenceName = p_SequenceName;

-- Unlock Tables tbSequence;

-- Commit;

Return v_Result;

End;;

但是MySQL提示在存储过程中不允许锁表,也不允许启动事务。

该如何解决啊?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值