如何在mysql数据里使用Oracle序列语法.NEXTVAL和.CURVAL.
假设在mysql中序列的语法是:
NEXTVAL('sequence');
CURRVAL('sequence');
SETVAL('sequence',value);
-- 1创建tas_music表
DROP TABLE IF EXISTS `tas_app`.`tas_music`;
CREATE TABLE `tas_app`.`tas_music` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL,
`icon` varchar(256) NOT NULL DEFAULT '',
`url` varchar(256) NOT NULL DEFAULT '',
`lyric` varchar(256) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2093 DEFAULT CHARSET=utf8;
-- 2创建序列表
DROP TABLE IF EXISTS `tas_app`.`tas_sequence`;
CREATE TABLE `tas_app`.`tas_sequence` (
`name` varchar(50) NOT NULL,
`current_value` int(11) NOT NULL,
`increment` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 3序列表里插入如下记录
insert into tas_app.tas_sequence values('music',23,1);
-- 4创建nextval function的代码如下:
DELIMITER $$
DROP FUNCTION IF EXISTS `nextval` $$
CREATE DEFINER=`admin`@`%` FUNCTION `nextval`(seq_name VARCHAR(50)) RETURNS int(11)
BEGIN
UPDATE tas_sequence
SET current_value = current_value + increment
WHERE name = seq_name;
RETURN currval(seq_name);
END $$
DELIMITER ;
-- 5创建setval function的代码如下:
DELIMITER $$
DROP FUNCTION IF EXISTS `setval` $$
CREATE DEFINER=`admin`@`%` FUNCTION `setval`(seq_name VARCHAR(50), value INTEGER) RETURNS int(11)
BEGIN
UPDATE tas_sequence
SET current_value = value
WHERE name = seq_name;
RETURN currval(seq_name);
END $$
DELIMITER ;
-- 6创建currval function的代码如下:
DELIMITER $$
DROP FUNCTION IF EXISTS `currval` $$
CREATE DEFINER=`admin`@`%` FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS int(11)
BEGIN
DECLARE value INTEGER;
SET value = 0;
SELECT current_value INTO value
FROM tas_sequence
WHERE name = seq_name;
RETURN value;
END $$
DELIMITER ;
-- 7创建触发器
DELIMITER $$
drop trigger if exists tas_music_trigger $$
create trigger tas_music_trigger before insert on tas_music
for each row begin
if new.id is null or new.id = '' or new.id = 0 THEN
set new.id = nextval('music');
end if;
end $$
DELIMITER ;
-- 8至此,向tas_music表插入数据时,如果id值为空,则id会取序列值.
分享到:
相关推荐
mysql实现sequence功能 1.建立sequence记录表 CREATE TABLE `sys_sequence` ( `seq_name` varchar(50) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, `min_value` int(11) NOT NULL, `max_value` int(11)...
mysql中实现sequence.pdf
找了一些相关的资料,发现mysql这方面的实现,原理都是一条数据库记录,不断update它的值。然后大部分的实现方案,都用到了函数。 贴一下网上的代码: 基于mysql函数实现 表结构 CREATE TABLE `t_sequence` ( `...
主要介绍了在MySQL中创建实现自增的序列(Sequence)的教程,分别列举了两个实例并简单讨论了一些限制因素,需要的朋友可以参考下
MySQL实现类似Oracle的序列 Oracle一般使用序列(Sequence)来处理主键字段,而MySQL则提供了自增长(increment)来实现类似的目的; 但在实际使用过程中发现,MySQL的自增长有诸多的弊端:不能控制步长、开始索引、...
Oracle必须通过创建sequence序列来实现自动增加列的功能。 首先要建立序列(当然必须要先建好表,添加好主键约束,这列假设约束名为test_sequence) create sequence test_sequence [increment by 1]–增长的步长 ...
当我们对MySQL进行分表操作... 可以通过下面的方法来实现sequence特性产生唯一ID: 1. 通过MySQL表生成ID 对于插入也就是insert操作,首先就是获取唯一的id了,就需要一个表来专门创建id,插入一条记录,并获取最
这样的实现比较简单,如下的order by语句就可以实现了。 order by PROMOTE_STATUS desc ,SEQUENCE_ID desc…… 结果移交测试之后,产品觉得这里可以优化下,文章的展示要改为已发布、待发布、已下线(没错,已下线...
在实现上, UidGenerator通过借用未来时间来解决sequence天然存在的并发限制; 采用RingBuffer来缓存已生成的UID, 并行化UID的生产和消费, 同时对CacheLine补齐,避免了由RingBuffer带来的硬件级「伪共享」问题. 最终...
支持 Oracle 使用 SEQUENCE 实现自增主键:需要事先建立好表主键对应的SEQUENCE,并且SEQUENCE的名称作出了要求:格式为table_name_SEQUENCEModel 类支持 Builder 模式创建,示例代码:User user = new User.Builder...
实现只要把数据数据库设计好,整个项目就完成了很大一部分代码的编写,大大节省了项目的开发成本。支持MySQL、Oracle、SQL Servce、PostgreSQL四种数据库,支持Window、Linux、MacBook等多种操作系统。 TableGo v...
(2)Mysql中搜索引擎Innodb(聚簇索引)和Mysiam(非聚簇索引)都采用B+,oracle也采用B+树实现 注:聚簇索引:一张表只能建立一个聚簇索引,以主键建立索引。聚簇索引包括主键索引和二级索引(二级索引是在对非主键...
2.本程序部分实现AJAX功能,采用DWR框架。 3.程序运行环境为MYECLIPSE 5.0 + TOMACT 5.5 + ORACLE 9i 4.配置说明:将lib目录下的commons-pool-1.2.jar,commons-dbcp-1.2.jar,ojdbc14.jar复制到TOMACT目录下的...
MySQL Oracle SQL Server PostgreSQL SQLite 标识列(IDENTITY) — :check_mark: :check_mark: :check_mark: — 序列(SEQUENCE) — :check_mark: :check_mark: :check_mark: — AUTO_INCREMENT :check_...
mysql等其他数据库中有随着记录的插入而表ID自动增长的功能,而oracle却没有这样的功能,我们有以下两种方式可以解决字段自增长的功能。 因为两种方式都需要通过创建序列来实现,这里先给出序列的创建方式。 ...
twitter在把存储系统从MySQL迁移到Cassandra的过程中由于Cassandra没有顺序ID生成机制,于是自己开发了一套全局唯一ID生成服务:Snowflake。 1 41位的时间序列(精确到毫秒,41位的长度可以使用69年) 2 10位的机器...
mysql等其他数据库中有随着记录的插入而表ID自动增长的功能,而oracle却没有这样的功能,我们有以下两种方式可以解决字段自增长的功能。 因为两种方式都需要通过创建序列来实现,这里先给出序列的创建方式。 CREATE ...