mysql實現sequence

 
如何在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會取序列值.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章