mysqlはnextVal機能を実現します。

1477 ワード

http://blog.csdn.net/jdzms23/article/details/44228661 まずテーブルを作成します
CREATE TABLE `sys_sequence` (  
   `NAME` varchar(50) NOT NULL,  
   `CURRENT_VALUE` int(11) NOT NULL DEFAULT '0',  
   `INCREMENT` int(11) NOT NULL DEFAULT '1',  
   PRIMARY KEY (`NAME`)  
 )  
レコードの挿入
INSERT INTO SYS_SEQUENCE(NAME,CURRENT_VALUE,INCREMENT) VALUES('TBL_FS', 1,1)  
DELIMITER $$  
  
DROP FUNCTION IF EXISTS `currval`$$  
  
CREATE DEFINER=`root`@`%` FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS INT(11)  
BEGIN  
DECLARE VALUE INTEGER;  
SET VALUE=0;  
SELECT current_value INTO VALUE  
FROM sys_sequence   
WHERE NAME=seq_name;  
RETURN VALUE;  
END$$  
  
DELIMITER ;  

現在のレコードをクエリー:
select currval('TBL_FS');  
Error Code:1449 The user specified as a definer('root'@')does not existエラーが発生したら、次のようなsqlを実行します。
grant all privileges on *.* to root@"%" identified by "password";   
flush privileges;    
現在の記録sqlを続けます。nextval関数の作成に成功しました。
DELIMITER $$  
DROP FUNCTION IF EXISTS `nextval`$$  
  
CREATE DEFINER=`root`@`%` FUNCTION `nextval`(seq_name varchar(50)) RETURNS int(11)  
BEGIN  
UPDATE sys_sequence  
SET CURRENT_VALUE = CURRENT_VALUE + INCREMENT  
where name=seq_name;  
return currval(seq_name);  
END$$  
nextval関数を実行します
select nextval('tbl_fs')