首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用自动增量获取表的最大值的Mysql查询

问使用自动增量获取表的最大值的Mysql查询
EN

Stack Overflow用户
提问于 2013-12-03 01:32:16
回答 2查看 340关注 0票数 1

嘿,伙计们,我正在使用这个查询来获取使用自动增量的表的最大值

代码语言:javascript
复制
SELECT table_schema,
   table_name,
   data_type,
   ( CASE data_type
       WHEN 'tinyint' THEN 255
       WHEN 'smallint' THEN 65535
       WHEN 'mediumint' THEN 16777215
       WHEN 'int' THEN 4294967295
       WHEN 'bigint' THEN 18446744073709551615
     end >> IF(Locate('unsigned', column_type) > 0, 0, 1) ) AS MAX_VALUE
FROM   information_schema.columns
WHERE  table_schema NOT IN ( 'MYSQL', 'INFORMATION_SCHEMA', 'PERFORMANCE_SCHEMA'
                       )
   AND extra = 'auto_increment'"

我很难理解IF语句在做什么。

代码语言:javascript
复制
end >> IF(Locate('unsigned', column_type) > 0, 0, 1) ) AS MAX_VALUE

有什么主意吗?

EN

回答 2

Stack Overflow用户

发布于 2013-12-03 01:58:37

双尖括号(大于符号)是二进制移位运算符。例如,如果列类型是无符号整数,它将移动1位置(实质上是对数字的平方),如果它是常规有符号整数,则根本不会移位。有符号整数使用一个位来表示正数还是负数。一个无符号整数使用该位作为值的一部分,因此它可以保存一个更高的最大值,但却不能保留负值。讲得通?

票数 0
EN

Stack Overflow用户

发布于 2013-12-03 02:01:05

函数'Locate('unsigned',column_type)‘被运行。这将检查字符串'unsigned‘是否出现在名为' column _type’的列中。如果在'column_type‘中找到,'Locate’函数将返回'unsigned‘中第一个字母的字符偏移/位置,如果没有找到,则返回0 (0)。这个结果被测试为大于0 '> 0'.如果为TRUE,则返回下一个表达式,在上述情况下为零(0)。如果为FALSE,则返回最终表达式1 (1)。

在其他语言中,它可以写成这样:

代码语言:javascript
复制
if( Lotate('unsigned', column_type) > 0 ) {
    return 0;
} else {
    return 1;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20341190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档