mysql数据库查询序列

mysql数据库查询序列,第1张

问题分析:序列=自增ID,是数据库根据数据插入先后顺序自动生成的。

查询方式:

只能再查询自增ID即可

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

select max(id) from tablename

SELECT LAST_INSERT_ID() 函数

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

select @@IDENTITY;

@@identity 是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头。

SHOW TABLE STATUS;

得出的结果里边对应表名记录中有个Auto_increment字段,里边有下一个自增ID的数值就是当前该表的最大自增ID

转mysql过程中,sql语句中需要获取行号,而sqlserver有row_number() over 高级函数获取行号,但是MySQL并不支持行号功能,所以需要修改,但是网上获取MySQL的行号五花八门,这里以最简单的为例。

给定一张表并插入测试数据

现在根据年纪排行,并获取行号,sql如下:

这样就能获取到行号了。

当前负责的项目使用的是hibernate,而“:”是hibernate的一个占位符,作为预编译使用的,使用上面的sql会报错误

在网上 查找了资料,却发现这是hibernate3X包之下的一个bug,(参照 id=41741)在hibernate4X中已经修复。但是项目中不可能使用hibernate40。

于是,又搜索了解决方式:

所以改成如下方式:

继续**搜索,终于发现一个解决方案:

所以将上面的sql改成

终于解决了。

附上stackoverflow的链接

解决方法1

读取mysql数据库文本字段的值方法如下:

publicvoidread(){

try{

//连接数据库

conn=JdbcUtils();

//查询resume字段,text格式

Stringsql="selectresumefromtestclobwhereid=1";

pt=conn(sql);

//执行查询并返回结果

rs=pt();

if(rsnext()){

//rs读取该字段

Readerreader=rs("resume");

//定义字符数组来存放读取值

charbuffer[]=newchar[1024];

while((readerread(buffer))!=-1){

//打印

Systemoutprintln(buffer);

}

readerclose();

}

}catch(Exceptione){

e();

}finally{

JdbcUtilsrelease(conn,pt,rs);

}

}

为每一行记录添加行号

方法一:

为了实现row_number函数功能,此方法我们要使用到会话变量,下面的实例是从

employees

表中选出5名员工,并为每一行添加行号:

1

2

3

4

5

6

set@row_number

=

0;

select

(@row_number:=@row_number

+

1)

asnum,

firstname,

lastname

from

employees

limit

5;

输出结果:

在这个实例中:

首先,定义变量

@row_number

,并初始化为0;

然后,在查询时我们为

@row_number

变量加1。

方法二:

这种方法仍然要用到变量,与上一种方法不同的是,我们把变量当做派生表,与主业务表关联查询实现row_number函数功能。下面我们仍然以查询5位员工为例:

1

2

3

4

5

select

(@row_number:=@row_number

+

1)

asnum,

firstname,

lastname

from

employees,(select@row_number:=0)

ast

limit

5;

这样的输出结果与上一种结果是一致的。

需要注意的是,在这种方法中,派生表必须要有别名,否则执行时会出错。

为每一组添加行号

了解oracle的朋友应该知道,row_number函数还有一个非常有用的功能就是分组排序

“over

partition

by”

。mysql同样可以实现这样的功能,看下面的实例:

首先将payments表中按照客户将记录分组:

1

2

3

4

5

select

customernumber,

paymentdate,

amount

from

payments

orderbycustomernumber;

输出结果如下:

下面我们需要将每个客户添加一个行号,这里我们需要用到两个变量,一个用于存储行号,一个用于存储客户编号,如:

1

2

3

4

5

6

7

8

9

10

11

select

@row_number

:=

case

when@customer_no

=

customernumber

then@row_number

+

1

else1

endasnum,

@customer_no

:=

customernumber

asc

Usage: mysql [OPTIONS] [database] //命令方式

-, --help //显示帮助信息并退出

-I, --help //显示帮助信息并退出

--auto-rehash //自动补全功能,就像linux里面,按Tab键出提示差不多,下面有例子

-A, --no-auto-rehash //默认状态是没有自动补全功能的。-A就是不要自动补全功能

-B, --batch //ysql不使用历史文件,禁用交互

(Enables --silent)

--character-sets-dir=name //字体集的安装目录

--default-character-set=name //设置数据库的默认字符集

-C, --compress //在客户端和服务器端传递信息时使用压缩

-#, --debug[=#] //bug调用功能

-D, --database=name //使用哪个数据库

--delimiter=name //mysql默认命令结束符是分号,下面有例子

-e, --execute=name //执行mysql的sql语句

-E, --vertical //垂直打印查询输出

-f, --force //如果有错误跳过去,继续执行下面的

-G, --named-commands

/Enable named commands Named commands mean this program's

internal commands; see mysql> help When enabled, the

named commands can be used from any line of the query,

otherwise only from the first line, before an enter

Disable with --disable-named-commands This option is

disabled by default/

-g, --no-named-commands

/Named commands are disabled Use \ form only, or use

named commands only in the beginning of a line ending

with a semicolon (;) Since version 109 the client now

starts with this option ENABLED by default! Disable with

'-G' Long format commands still work from the first

line WARNING: option deprecated; use

--disable-named-commands instead/

-i, --ignore-spaces //忽视函数名后面的空格

--local-infile //启动/禁用 LOAD DATA LOCAL INFILE

-b, --no-beep //sql错误时,禁止嘟的一声

-h, --host=name //设置连接的服务器名或者Ip

-H, --html //以html的方式输出

-X, --xml //以xml的方式输出

--line-numbers //显示错误的行号

-L, --skip-line-numbers //忽略错误的行号

-n, --unbuffered //每执行一次sql后,刷新缓存

--column-names //查寻时显示列信息,默认是加上的

-N, --skip-column-names //不显示列信息

-O, --set-variable=name //设置变量用法是--set-variable=var_name=var_value

--sigint-ignore //忽视SIGINT符号(登录退出时Control-C的结果)

-o, --one-database //忽视除了为命令行中命名的默认数据库的语句。可以帮跳过日志中的其它数据库的更新。

--pager[=name] //使用分页器来显示查询输出,这个要在linux可以用more,less等。

--no-pager //不使用分页器来显示查询输出。

-p, --password[=name] //输入密码

-P, --port=# //设置端口

--prompt=name //设置mysql提示符

--protocol=name //使用什么协议

-q, --quick //不缓存查询的结果,顺序打印每一行。如果输出被挂起,服务器会慢下来,mysql不使用历史文件。

-r, --raw //写列的值而不转义转换。通常结合--batch选项使用。

--reconnect //如果与服务器之间的连接断开,自动尝试重新连接。禁止重新连接,使用--disable-reconnect。

-s, --silent //一行一行输出,中间有tab分隔

-S, --socket=name //连接服务器的sockey文件

--ssl //激活ssl连接,不激活--skip-ssl

--ssl-ca=name //CA证书

--ssl-capath=name //CA路径

--ssl-cert=name //X509 证书

--ssl-cipher=name //SSL cipher to use (implies --ssl)

--ssl-key=name //X509 密钥名

--ssl-verify-server-cert //连接时审核服务器的证书

-t, --table //以表格的形势输出

--tee=name //将输出拷贝添加到给定的文件中,禁时用--disable-tee

--no-tee //根--disable-tee功能一样

-u, --user=name //用户名

-U, --safe-updates //Only allow UPDATE and DELETE that uses keys

-U, --i-am-a-dummy //Synonym for option --safe-updates, -U

-v, --verbose //输出mysql执行的语句

-V, --version //版本信息

-w, --wait //服务器down后,等待到重起的时间

--connect_timeout=# //连接前要等待的时间

--max_allowed_packet=# //服务器接收/发送包的最大长度

--net_buffer_length=# //TCP / IP和套接字通信缓冲区大小。

--select_limit=# //使用--safe-updates时SELECT语句的自动限制

--max_join_size=# //使用--safe-updates时联接中的行的自动限制

--secure-auth //拒绝用(pre-411)的方式连接到数据库

--server-arg=name //Send embedded server this as a parameter

--show-warnings //显示警告

$sql = "select ds from table order by id desc limit 1";

$result = mysql_query($sql);

$row = mysql_fetch_array($result);

$fd = $row['ds'];

以上就是关于mysql数据库查询序列全部的内容,包括:mysql数据库查询序列、hibernate带冒号查询、读取mysql数据库文本字段的值方法(mysql获取表字段信息)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10209547.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存