mysql数据库实现nextval函数

在oracle中使用序列(Sequence)来处理主键字段,现在想要在Mysql中也实现类似的效果。

1、新建序列表

drop table if exists sequence;   
create table sequence (       
seq_name    VARCHAR(50)  NOT NULL,    -- 序列名称       
current_val     INT         NOT NULL,             -- 当前值       
increment_val   INT         NOT NULL    DEFAULT 1, -- 步长(跨度)       
PRIMARY KEY (seq_name));

2、新增一个序列

INSERT INTO sequence VALUES ('seq_test', '0', '1');

3、创建currval函数,用于获取序列当前值

create function currval(v_seq_name VARCHAR(50))   
returns integer(11) 
begin
 declare value integer;
 set value = 0;
 select current_val into value  from sequence where seq_name = v_seq_name;
   return value;
end;

4、查询当前值

select currval('seq_test');

5、创建nextval函数,用于获取序列下一个值

create function nextval (v_seq_name VARCHAR(50)) returns integer(11) 
begin
    update sequence set current_val = current_val + increment_val  where seq_name = v_seq_name;
    return currval(v_seq_name);
end;

6、查询下一个值

select nextval('seq_test');
  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据库应用系统设计与实现 实验类型:设计型 实验地点:2楼312 实验时间:12月14日、21日周五1-3/5-7节 实验内容: 系统概述: 某银行需要开发ATM存取款机系统实现如下功能: 1)开户(到银行填写开户申请单,卡号自动生成) 2)取款 3)存款 4)查询余额 题目要求: 一、建库、建表、建约束 1、使用SQL创建表 客户信息表userinfo 字段名称 说明 备注 customerID 顾客编号 自动编号(标识列),从1开始,主键 用序列sequence实现,用其属性:nextval customerName 开户名 必填 PID 身份证号 必填,智能是18位或15位,唯一约束 check约束length()函数 telephone 联系电话 必填,11位手机号 check约束,’[0-9]’ address 居住地址 银行卡信息表cardinfo 字段名称 说明 cardID 卡号 必填,主键,银行的卡号规则和电话好吗一样,一般前8位代表特殊含义,如某综合某支行等,假定该行要求其营业厅的卡号格式为10103576**** ***开始,每4位号码后有空格,卡号一般是随机产生。 curType 货币种类 必填,默认为RMB savingTate 存款类型 活期/定活两便/定期 openDate 开户日期 必填,默认为系统当前日期 openMoney 开户金额 必填,不低于1元 balance 余额 必填,不低于1元,否则将销户 pass 密码 必填,6位数字,开户时默认为6个“6” IsReportloss 是否挂失 必填,是/否值,默认为“否” customerID 顾客编号 外键,必填,表示该卡对应的顾客编号,一位顾客允许办理多张卡号 交易信息表transinfo 字段名称 说明 transDate 交易日期 必填,默认为系统当前日期 cardID 卡号 必填,外键 transType 交易类型 必填,只能是存入/支取 transMoney 交易金额 必填,大于0 remark 备注 可选,其他说明 2、使用SQL语言在每个表上添加约束 主键约束、外键约束、CHECK约束、默认约束、非空约束 二、插入测试数据 使用SQL语言向每个表中插入至少3条记录 三、模拟常规业务 1)修改客户密码 2)办理银行卡挂失 3)统计银行资金流通余额和盈利结算 银行资金流通余额=总存入金额-总支取金额 盈利结算=总支取金额 * 0.008 – 总存入金额 * 0.003 4)查询本周开户的卡号,显示该卡相关信息 5)查询本月交易金额最高的卡号 6)查询挂失账号的客户信息 四、利用视图实现数据查询 1)为客户提供以下3个视图供其查询该客户数据 客户基本信息:vw_userInfo 银行卡信息:vw_cardInfo 银行卡交易信息:vw_transInfo 2)提供友好界面,要求各列名称为中文描述 3)调用创建的视图获得查询结果 五、用存储过程实现业务处理 1)完成开户业务 2)完成取款或存款业务 3)根据卡号打印对账单 4)查询、统计指定时间段内没有发生交易的账户信息
### 回答1: MySQL中没有nextval函数,但是在其他数据库中,nextval函数通常用于获取序列的下一个值。序列是一种自增的数字,用于生成唯一的标识符或主键。在MySQL中,可以使用自增列来实现类似的功能。 ### 回答2: MySQL中并没有nextval函数,它是Oracle数据库中一个自增函数的名称。MySQL实现自增一般使用auto_increment属性。 在MySQL数据库中,auto_increment用于设置表中一个字段的值在插入时自增。这个字段必须是整数类型,并且在表定义时需要定义为主键(primary key)或唯一索引(unique index)。 当插入一条新记录时,这个字段的值自动递增,并且比上一条记录的值大1。 例如,假定我们有一个students表,它有一个id字段,我们可以为id设置auto_increment属性,让它在插入新记录时自增。 CREATE TABLE students ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) ); 当我们向students表中插入一条新记录时,如果没有指定id字段的值,MySQL会自动为它分配一个唯一的自增值。例如,我们执行以下SQL语句: INSERT INTO students (name) VALUES ('张三'); 执行该语句后,MySQL将自动为id字段分配一个值,假定它为1。如果再执行以下插入语句: INSERT INTO students (name) VALUES ('李四'); 这时,MySQL会为id字段自动分配一个比上一个插入记录大1的值,这里就是2。 所以可以看出,MySQL中的自增功能类似于Oracle数据库中的nextval函数,它会在每次插入新记录时自动递增一个值,实现一个连续的序列。 ### 回答3: MySQL并没有官方提供nextval函数,但是在一些第三方工具或插件中可能会有使用nextval函数的情况,下面我来简述一下nextval函数的作用。 nextval函数主要用于获取序列(Sequence)的下一个值。序列是一种类似自增长ID的机制,可以在插入记录时为某个字段赋值,保证每个记录的值都是唯一的,且按照一定的顺序排列。当一个序列被创建时,它会自动创建一个相关的计数器,每次调用nextval函数都会将计数器的值加1,并返回这个新值。序列通常用于表的主键字段上,在多个并发插入记录的情况下,能够保证每个记录的主键值都是唯一的。 在数据库中,要使用nextval函数需要先创建一个序列,示例代码如下: CREATE SEQUENCE test_seq START WITH 1 INCREMENT BY 1; 上述代码创建了一个名为test_seq的序列,初始值为1,每次调用nextval函数将会自增1。接下来就可以使用nextval函数获取序列的下一个值,示例代码如下: SELECT nextval('test_seq'); 运行以上代码将会返回2,同时将test_seq的值自增为2。 需要注意的是,不同的数据库中nextval函数的语法和使用方式可能会有所不同,具体请参考相应的文档和手册。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值