资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

mysql怎么查询序列 mysql查询序号

mysql中我要查出某个值在查出来的N条数据中是第几条数据,这个怎么查?

我假设你原来查出N条数据的代码如下:(你自己替换成你的)

10年积累的网站制作、成都网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站后付款的网站建设流程,更有献县免费网站建设让你可以放心的选择与我们合作。

select * from tb order by col ;

现在你改成这样:

SET @row_number =0;

select *, @row_number := @row_number+1 AS row_number

from tb

order by col;

--看到了吧 用变量来产生一个序列

--如果你要查询特定值,可以这样

select row_number

from (

select *, @row_number := @row_number+1 AS row_number

from tb

order by col) k

where 字段名='你要的字段值';

如何查询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 一次查询多个序列

只能再查询自增ID即可

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

select max(id) from tablename

SELECT LAST_INSERT_ID() 函数

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

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

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


网站标题:mysql怎么查询序列 mysql查询序号
URL链接:http://cdkjz.cn/article/ddeeihd.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220