oracle序列和mysql序列

来源:互联网 发布:申请斯坦福大学知乎 编辑:程序博客网 时间:2024/06/08 04:38
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")即可得到下一个值