分享

mysql实现nextVal功能

 Baruch 2017-10-25 发布于四川

首先创建表:

  1. CREATE TABLE `sys_sequence` (  
  2.    `NAME` varchar(50) NOT NULL,  
  3.    `CURRENT_VALUE` int(11) NOT NULL DEFAULT '0',  
  4.    `INCREMENT` int(11) NOT NULL DEFAULT '1',  
  5.    PRIMARY KEY (`NAME`)  
  6.  )  

插入记录

  1. INSERT INTO SYS_SEQUENCE(NAME,CURRENT_VALUE,INCREMENT) VALUES('TBL_FS', 1,1)  
  1.   
  1.   
  1. DELIMITER $$  
  2.   
  3. DROP FUNCTION IF EXISTS `currval`$$  
  4.   
  5. CREATE DEFINER=`root`@`%` FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS INT(11)  
  6. BEGIN  
  7. DECLARE VALUE INTEGER;  
  8. SET VALUE=0;  
  9. SELECT current_value INTO VALUE  
  10. FROM sys_sequence   
  11. WHERE NAME=seq_name;  
  12. RETURN VALUE;  
  13. END$$  
  14.   
  15. DELIMITER ;  



查询当前记录:

  1. select currval('TBL_FS');  
如果出现Error Code: 1449 The user specified as a definer ('root'@'%') does not exist 错误,则执行如下sql:

  1. grant all privileges on *.* to root@"%" identified by "password";   
  2. flush privileges;    


继续执行当前记录sql则成功

创建nextval函数

  1. DELIMITER $$  
  2. DROP FUNCTION IF EXISTS `nextval`$$  
  3.   
  4. CREATE DEFINER=`root`@`%` FUNCTION `nextval`(seq_name varchar(50)) RETURNS int(11)  
  5. BEGIN  
  6. UPDATE sys_sequence  
  7. SET CURRENT_VALUE = CURRENT_VALUE + INCREMENT  
  8. where name=seq_name;  
  9. return currval(seq_name);  
  10. END$$  


执行nextval函数

  1. select nextval('tbl_fs')  




    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多