189 8069 5689

mysql的序列怎么查看 mysql怎么查询创建的序列

mysql 字段内容是用逗号分隔的。怎么按序列查询内容

你可以写一个存储过程,相当于自定义的函数,不一定有现成的函数。

成都创新互联专注于平潭网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供平潭营销型网站建设,平潭网站制作、平潭网页设计、平潭网站官网定制、重庆小程序开发服务,打造平潭网络公司原创品牌,更为您提供平潭网站排名全网营销落地服务。

mysql 序列功能

mysql 里没有这个东西!

好像你在建表的时候可以这么写!

create table test(id int not null primary key auto_increment);

主要是auto_increment

如何使用mysql 一次查询多个序列

只能再查询自增ID即可

具体操作:MYSQL获取自增ID的四种方法

select max(id) from tablename

SELECT LAST_INSERT_ID() 函数

LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。

如何查询mysql sequence

项目应用中,曾有以下一个场景:

接口中要求发送一个int类型的流水号,由于多线程模式,如果用时间戳,可能会有重复的情况(当然概率很小)。

所以想到了利用一个独立的自增的sequence来解决该问题。

当前数据库为:mysql

由于mysql和oracle不太一样,不支持直接的sequence,所以需要创建一张table来模拟sequence的功能,理由sql语句如下:

第一步:创建--Sequence 管理表

Java代码

DROP TABLE IF EXISTS sequence;

CREATE TABLE sequence (

name VARCHAR(50) NOT NULL,

current_value INT NOT NULL,

increment INT NOT NULL DEFAULT 1,

PRIMARY KEY (name)

) ENGINE=InnoDB;

第二步:创建--取当前值的函数

Java代码

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 value INTEGER;

SET value = 0;

SELECT current_value INTO value

FROM sequence

WHERE name = seq_name;

RETURN value;

END

$

DELIMITER ;

第三步:创建--取下一个值的函数

Java代码

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

SET current_value = current_value + increment

WHERE name = seq_name;

RETURN currval(seq_name);

END

$

DELIMITER ;

第四步:创建--更新当前值的函数

Java代码

DROP FUNCTION IF EXISTS setval;

DELIMITER $

CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)

RETURNS INTEGER

LANGUAGE SQL

DETERMINISTIC

CONTAINS SQL

SQL SECURITY DEFINER

COMMENT ''

BEGIN

UPDATE sequence

SET current_value = value

WHERE name = seq_name;

RETURN currval(seq_name);

END

$

DELIMITER ;

第五步:测试函数功能

当上述四步完成后,可以用以下数据设置需要创建的sequence名称以及设置初始值和获取当前值和下一个值。

INSERT INTO sequence VALUES ('TestSeq', 0, 1);----添加一个sequence名称和初始值,以及自增幅度

SELECT SETVAL('TestSeq', 10);---设置指定sequence的初始值

SELECT CURRVAL('TestSeq');--查询指定sequence的当前值

SELECT NEXTVAL('TestSeq');--查询指定sequence的下一个值

在java代码中,可直接创建sql语句查询下一个值,这样就解决了流水号唯一的问题。

贴出部分代码(已测试通过)

Java代码

public void testGetSequence() {

Connection conn = JDBCUtils.getConnection(url, userName, password);

String sql = "SELECT CURRVAL('TestSeq');";

PreparedStatement ptmt = null;

ResultSet rs = null;

try {

ptmt = conn.prepareStatement(sql);

rs = ptmt.executeQuery();

int count = 0;

while (rs.next()) {

count = rs.getInt(1);

}

System.out.println(count);

} catch (SQLException e) {

e.printStackTrace();

} finally {

JDBCUtils.close(rs, ptmt, conn);

}

}

ps:在应用中,还有一种用java代码去实现模拟自增sequence的方式,具体思路是创建一张存放sequence的table,然后通过java调用sql语句去查询和修改这个table中指定sequence名称的值,这种方式请加上synchronized。具体代码这里就不上传了,因为实现了,未去测试过。

怎样获取MySQL自增长的最大序列号

用SELECT LAST_INSERT_ID() 取得,但是需要保证LAST_INSERT_ID和插入操作在同一个session


分享名称:mysql的序列怎么查看 mysql怎么查询创建的序列
标题链接:http://jkwzsj.com/article/dodgjes.html

其他资讯