您的位置:首页 > 数据库 > Oracle

oracle序列和mysql序列

2017-05-18 16:59 274 查看
1.什么是序列?

序列: 可供多个用户用来产生唯一数值的数据库对象
2.为什么用序列?

自动提供唯一的数值

共享对象

主要用于提供主键值

将序列值装入内存可以提高访问效率

3.怎么用序列?(重点)

oracle序列和mysql序列

oracle序列

创建

CREATE SEQUENCE dept_deptid_seq

INCREMENT BY 10 --每次增长的数值

START WITH 120 --从哪个值开始

MAXVALUE 9999 --最大值

[{MINVALUE n | NOMINVALUE}]

NOCACHE --是否缓存

NOCYCLE;--是否循环

查询

SELECT dept_deptid_seq.NEXTVAL FROM dual

SELECT dept_deptid_seq.CURRVAL FROM dual

修改

ALTER SEQUENCE dept_deptid_seq

INCREMENT BY 20

MAXVALUE 999999

NOCACHE

NOCYCLE;

删除

DROP SEQUENCE dept_deptid_seq;

mysql序列

创建sequence表

CREATE TABLE IF NOT EXISTS `sequence` (    

  `name` varchar(50) NOT NULL,  

  

  `current_value` int(11) NOT NULL,  

  

  `increment` int(11) NOT NULL DEFAULT '1'  

  

) ENGINE=MyISAM DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='序列表,命名s_[table_name]';  

  

INSERT INTO `sequence` (`name`, `current_value`, `increment`) VALUES  

  

('s_blog_account', 0, 1) 
创建nextval和currentval函数

DROP FUNCTION IF EXISTS `currval`;  

  

DELIMITER //  

  

CREATE  FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS int(11)  

  

    READS SQL DATA  

  

    DETERMINISTIC  

  

BEGIN  

  

DECLARE VALUE INTEGER;  

  

SET VALUE = 0;  

  

SELECT current_value INTO VALUE FROM sequence WHERE NAME = seq_name;  

  

RETURN VALUE;  

  

END//  

  

DELIMITER ;
DROP FUNCTION IF EXISTS `nextval`;  

  

DELIMITER //  

  

CREATE  FUNCTION `nextval`(seq_name VARCHAR(50)) RETURNS int(11)  

  

    DETERMINISTIC  

  

BEGIN  

  

UPDATE sequence SET current_value = current_value + increment WHERE NAME = seq_name;  

  

RETURN currval(seq_name);  

  

END//  

  

DELIMITER ;
维护序列表就可以完成对序列的维护,通过DML完成序列的增删改查操作

最后使用select nextval("s_blog_account")即可得到下一个值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: