第一步:创建--Sequence 管理表
DROP TABLE IF EXISTS sequence
CREATE TABLE sequence (
name VARCHAR(50) NOT NULL,
current_value INT NOTNULL,
increment INT NOT NULLDEFAULT 1,
PRIMARY KEY (name)
) ENGINE=InnoDB
第二步:创建--取当前值的函数
DROP FUNCTION IF EXISTS currval
DELIMITER $
CREATE FUNCTION currval (seq_name VARCHAR(50))
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE valueINTEGER
SET value = 0
SELECT current_value INTOvalue
FROMsequence
WHEREname = seq_name
RETURN value
END
$
DELIMITER
第三步:创建--取下一个值的函数
DROP FUNCTION IF EXISTS nextval
DELIMITER $
CREATE FUNCTION nextval (seq_name VARCHAR(50))
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
UPDATE sequence
SETcurrent_value = current_value + increment
WHEREname = seq_name
RETURN currval(seq_name)
END
$
DELIMITER
第四步:创建--更新当前值的函数
DROP FUNCTION IF EXISTS setval
DELIMITER $
CREATE FUNCTION setval (seq_name VARCHAR(50), valueINTEGER)
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
UPDATE sequence
SETcurrent_value = value
WHEREname = seq_name
RETURN currval(seq_name)
END
$
DELIMITER
接下来,就可以了
SELECT concat(date_format(NOW(),'%Y%m%d%H%i%s'),lpad((SELECT NEXTVAL('TestSeq')),4,0))
--201707181025200020
mysql不支持sequence可以使用主键自动增长特性实现
create table test
(
id int auto_increment primary key
#其他字段定义
)
然后插入时不用管主键
insert into test(其他字段) values(值)
就可以了
可以使用主键来设置标识列,最常用的方法是使用自增id来做为标识列。请参考下列sql语句:create
table
`animal`
(
`id`
int(11)
not
null
auto_increment,
--
定义自增id标识列
`animal`
varchar(10)
default
null,
primary
key
(`id`)
)
engine=innodb
auto_increment=3
default
charset=gb2312
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)