mysql创建序列,并根据表名获取

本文介绍如何使用MySQL通过创建专门的表及自定义函数来实现序列生成器,包括获取当前值、下一个值及设置初始值等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

—创建索引管理表
DROP TABLE IF EXISTS sequence;
CREATE TABLE sequence (
name VARCHAR(50) NOT NULL,
current_value INT NOT NULL,
increment INT NOT NULL DEFAULT 1,
PRIMARY KEY (name)
) ENGINE=InnoDB;
—-第二步:创建–取当前值的函数
DROP FUNCTION IF EXISTS currval;
DELIMITER CREATEFUNCTIONcurrval(seqnameVARCHAR(50))RETURNSINTEGERLANGUAGESQLDETERMINISTICCONTAINSSQLSQLSECURITYDEFINERCOMMENTBEGINDECLAREvalueINTEGER;SETvalue=0;SELECTcurrentvalueINTOvalueFROMsequenceWHEREname=seqname;RETURNvalue;END
DELIMITER ;
—–第三步:创建–取下一个值的函数
DROP FUNCTION IF EXISTS nextval;
DELIMITER CREATEFUNCTIONnextval(seqnameVARCHAR(50))RETURNSINTEGERLANGUAGESQLDETERMINISTICCONTAINSSQLSQLSECURITYDEFINERCOMMENTBEGINUPDATEsequenceSETcurrentvalue=currentvalue+incrementWHEREname=seqname;IFROWCOUNT()=0THENINSERTINTOsequenceVALUES(seqname,1000,1);ENDIF;RETURNcurrval(seqname);END
DELIMITER ;
—第四部
DROP FUNCTION IF EXISTS setval;
DELIMITER CREATEFUNCTIONsetval(seqnameVARCHAR(50),valueINTEGER)RETURNSINTEGERLANGUAGESQLDETERMINISTICCONTAINSSQLSQLSECURITYDEFINERCOMMENTBEGINUPDATEsequenceSETcurrentvalue=valueWHEREname=seqname;RETURNcurrval(seqname);END

DELIMITER ;

—-测试
INSERT INTO sequence VALUES (‘TestSeq’, 0, 1);—-添加一个sequence名称和初始值,以及自增幅度
SELECT SETVAL(‘TestSeq’, 10);—设置指定sequence的初始值
SELECT CURRVAL(‘TestSeq’);–查询指定sequence的当前值
SELECT NEXTVAL(‘TestSeq1’);–查询指定sequence的下一个值

—-最终的函数结果
SELECT NEXTVAL(‘TABLE_NAME’);–TABLE_NAME是表名

insert into car_info values(NEXTVAL(‘car_info’),’xxxxx’,’xxxx’);
自测是可以通过的,这里的id我的是numeric(19,0),用这个函数也是可以的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值