MySQL学习——查询示例(三)

 1 计算每天的访问

以下示例显示了如何使用位组函数来计算用户每月访问网页的天数。

CREATE TABLE t1 (year YEAR, month INT UNSIGNED, day INT UNSIGNED); INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2), (2000,2,23),(2000,2,23);

示例表包含表示用户访问页面的年月日值。要确定每月进行这些访问的天数,请使用以下查询:

SELECT year,month,BIT_COUNT(BIT_OR(1<<day)) AS days FROM t1GROUP BY year,month;

返回值:

+------+-------+------+| year | month | days |+------+-------+------+| 2000 |     1  |   3  || 2000 |     2  |   2  |+------+-------+------+

该查询计算每个年/月组合在表中出现的不同天数,并自动删除重复条目。

2 AUTO_INCREMENT的使用

AUTO_INCREMENT属性可用于为新行生成唯一标识:

CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ); INSERT INTO animals (name) VALUES ('dog'),('cat'),('penguin'), ('lax'),('whale'),('ostrich'); SELECT * FROM animals;

返回值:

+----+---------+| id |   name  |+----+---------+|  1 |      dog ||  2 |      cat ||  3 |  penguin ||  4 |      lax ||  5 |    whale ||  6 |  ostrich |+----+---------+

没有为AUTO_INCREMENT列指定任何值,因此MySQL会自动分配序列号。除非启用了NO_AUTO_VALUE_ON_ZERO SQL模式,否则也可以将0显式分配给列以生成序列号。例如:

INSERT INTO animals (id,name) VALUES(0,'groundhog');

如果列被声明为NOT NULL,也可以将NULL分配给列以生成序列号。例如:

INSERT INTO animals (id,name) VALUES(NULL,'squirrel');

在AUTO_INCREMENT列中插入任何其他值时,该列将被设置为该值,并且序列将被重置,以便下一个自动生成的值从最大列值开始依次出现。例如:

NSERT INTO animals (id,name) VALUES(100,'rabbit'); INSERT INTO animals (id,name) VALUES(NULL,'mouse'); SELECT * FROM animals; +-----+-----------+ |  id |     name   | +-----+-----------+ |   1 |        dog | |   2 |        cat | |   3 |    penguin | |   4 |         lax | | 5   |       whale | |   6 |     ostrich | |   7 |   groundhog | |   8 |    squirrel | | 100 |      rabbit | | 101 |       mouse | +-----+-----------+

直接更新一个AUTO_INCREMENT列的值时,它通常不会重置整个AUTO_INCREMENT序列的计数器。但是,如果更新后的值大于当前的AUTO_INCREMENT值,并且您之后进行了一个新的插入,那么下一个自动生成的ID可能会跳过一些数字。这是因为AUTO_INCREMENT的计数器在每次成功插入后会递增,而不是基于当前列中的最大值。

LAST_INSERT_ID() 是一个SQL函数,用于检索最后一个由当前连接生成的AUTO_INCREMENT值。

mysql_insert_id() 是C API中的一个函数,用于执行与LAST_INSERT_ID()相同的功能,但它只能在C或C++等编程语言中使用。

这两个函数都是连接特定的,所以其他连接的插入操作不会影响它们的结果。

应该为AUTO_INCREMENT列选择最小的整数数据类型,以节省存储空间和提高性能。但是,您也需要确保该数据类型足够大,可以容纳您预期的最大序列值。使用UNSIGNED属性可以加倍可用范围,这在许多情况下都很有用。
如果AUTO_INCREMENT列达到其数据类型的上限,并且您尝试插入一个新行,那么操作通常会失败,并返回一个错误,指出已达到上限。在某些情况下,您可能需要考虑使用更大的数据类型或重新设计您的数据库架构以避免这种情况。

例如,如果使用TINYINT,则允许的最大序列号为127。对于TINYINT UNSIGNED,最大值为255。

在进行多行插入时,LAST_INSERT_ID() 和 mysql_insert_id() 函数确实返回的是插入的第一行的 AUTO_INCREMENT 值。这是为了确保在复制环境中能够正确地重新生成这些多行插入。

关于从非1的值开始设置 AUTO_INCREMENT 值,确实可以在创建表或修改表时使用 CREATE TABLE 或 ALTER TABLE 语句来设置。以下是如何设置 AUTO_INCREMENT 起始值的示例:

mysql> ALTER TABLE tbl AUTO_INCREMENT = 100;

对于 MyISAM 存储引擎的表,确实可以在多列索引的次要列上指定 AUTO_INCREMENT 属性。但是,需要澄清的是,MyISAM 并不直接支持在多列索引的次要列上使用 AUTO_INCREMENT。这里的描述可能是对一种特定用法的解释,其中 AUTO_INCREMENT 是在主键列上设置的,但你可能想要通过某种方式将数据分组到有序的组中。

在这种情况下,AUTO_INCREMENT列的生成值计算为MAX(AUTO_INCREMENT_column)+1 WHERE前缀=给定前缀。当您想将数据放入有序的组中时,这很有用。

CREATE TABLE animals ( grp ENUM('fish','mammal','bird') NOT NULL, id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (grp,id) ) ENGINE=MyISAM; INSERT INTO animals (grp,name) VALUES ('mammal','dog'),('mammal','cat'), ('bird','penguin'),('fish','lax'),('mammal','whale'), ('bird','ostrich'); SELECT * FROM animals ORDER BY grp,id;

返回值为:

+--------+----+---------+|    grp | id |     name |+--------+----+---------+|   fish |   1 |     lax || mammal |   1 |     dog || mammal |   2 |     cat || mammal   | 3 |   whale || bird     | 1 | penguin || bird     | 2 | ostrich |+--------+----+---------+

在这种情况下(当AUTO_INCREMENT列是多列索引的一部分时),如果删除任何组中AUTO_INCREMENT值最大的行,则会重用AUTO_INCREENT值。即使对于MyISAM表也会发生这种情况,因为AUTO_INCREMENT值通常不会被重用。

如果AUTO_INCREMENT列是多个索引的一部分,MySQL将使用以AUTO_INCREMENT列开头的索引(如果有)生成序列值。例如,如果动物表包含索引PRIMARY KEY(grp,id)和INDEX(id),MySQL将忽略PRIMARY KEY以生成序列值。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/21385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CMU FAR Planner 在已知和未知环境中进行高效的导航任务算法详解

FAR Planner: Fast, Attemptable Route Planner using Dynamic Visibility Update 本文将介绍一种基于可视图的路径规划框架FAR Planner,它能够在已知和未知环境中进行高效的导航任务。 摘要 论文提出了一种能够处理已知和未知环境中导航任务的基于可视图的规划框架。该规划…

easyocr.Reader().readtext()说明

easyocr.Reader().readtext() 是 EasyOCR 库中的一个方法&#xff0c;用于从图像中提取文本。 该方法的作用是从给定的图像中读取文本&#xff0c;并返回一个包含检测到的文本及其对应位置的列表。 以下是该方法的参数和返回值&#xff1a; readtext(image, decodergreedy, …

PolarCTF 2024夏季个人挑战赛 个人WP

【WEB】审计 直接给源码&#xff0c;php特性 秒了&#xff0c;有个特殊的东西 0e215962017&#xff0c;他md5后的值是本身 【WEB】扫扫看 敏感目录flag.php 【WEB】debudao 查看网页源码&#xff08;里面的flag是错的&#xff09; 查看网络 【WEB】ExX? 开题 扫一下&#…

R语言 | 安装ggpubr R包时编译语句中出现 WARNING: ignoring environment value of R_HOME 而报错

在安装 ggpubr 时&#xff0c;出现报错。 1. 环境介绍 系统&#xff1a;CentOS7.9 $ R --version R version 4.3.2 (2023-10-31) – “Eye Holes” $ gcc --version gcc (GCC) 12.3.0 2. 缺少cmake $ sudo yum install cmake3> system("/usr/bin/cmake3 --versio…

法国工程师数电练习题——有限状态机

1. 有限状态机 1.1 问题背景描述 给定的有限状态机由其状态图表示&#xff0c;具有两个输入E1和E2以及一个输出S。状态机为下图。请为以下输入序列绘制这个Moore机的时序图&#xff1a; 1) 在t50纳秒时&#xff0c;E1E211 2) 在t150纳秒时&#xff0c;E1E200 …

Redis教程(十九):Redis的Redisson布隆过滤器

传送门&#xff1a;Redis教程汇总篇&#xff0c;让你从入门到精通 布隆过滤器 布隆过滤器&#xff08;Bloom Filter&#xff09;是一种空间效率极高的概率型数据结构&#xff0c;用于快速检测一个元素是否存在于一个集合中。由于其独特的特性&#xff0c;布隆过滤器可以在需要…

1.盒模型及其应用(溢出、外边距塌陷)

一、盒模型 盒模型详解-CSDN博客 CSS学习笔记3&#xff1a;CSS三大特性、盒子模型-CSDN博客 1.盒模型组成 &#xff08;1&#xff09;padding padding和border都会撑大盒子&#xff0c;margin不会. 如果没有指定盒子的width/height&#xff0c;那么padding不会撑大盒子。 &am…

Nvidia Jetson/Orin +FPGA+AI大算力边缘计算盒子:公路智能巡检解决方案

项目背景 中国公路网络庞大&#xff0c;总里程超过535万公里&#xff0c;高速公路里程位居世界前列。面对基础设施存量的不断增长&#xff0c;公路养护管理已迈入“建管养并重”的新时代。随着养护支出的逐年攀升&#xff0c;如何提升养护效率、降低管理成本&#xff0c;成为亟…

YOLOv10:实时端到端目标检测的新突破

目标检测作为计算机视觉领域的一个核心问题&#xff0c;其关键在于能够在图像中准确识别并定位对象。随着深度学习技术的发展&#xff0c;基于深度神经网络的目标检测方法不断涌现&#xff0c;其中YOLO&#xff08;You Only Look Once&#xff09;系列算法以其优异的实时性和准…

推荐几个开源的c#的工作流引擎组件

以下是一个.NET Core领域可以推荐使用的流程引擎的表格&#xff1a; 名称 生产厂家 下载地址 支持二开 独立部署 ccflow 济南驰骋信息技术有限公司 https://gitee.com/opencc 是 是 Elsa Elsa Workflows GitHub - elsa-workflows/elsa-core: A .NET workflows li…

C++类和对象下篇

&#x1f407; &#x1f525;博客主页&#xff1a; 云曦 &#x1f4cb;系列专栏&#xff1a;[C] &#x1f4a8;路漫漫其修远兮 吾将而求索 &#x1f49b; 感谢大家&#x1f44d;点赞 &#x1f60b;关注&#x1f4dd;评论 文章目录 &#x1f4d4;1、再谈构造函数&#x1f4f0;…

使用 el-autocomplete 实现远程搜索功能

在现代Web应用中&#xff0c;提供高效且用户友好的搜索体验至关重要。Element UI&#xff08;一个为Vue.js设计的桌面端UI框架&#xff09;中的el-autocomplete组件正是为了满足这一需求而设计的&#xff0c;它能够实现自动补全与异步搜索功能。本文将通过一个示例来介绍如何使…

【C++】类和对象——构造和析构函数

目录 前言类的六个默认构造函数构造函数1.构造函数的概念2.构造函数的特性 初始化列表1.构造函数整体赋值2.初始化列表 析构函数1.析构函数的概念2.析构函数的特性 前言 类和对象相关博客&#xff1a;【C】类和对象   我们前面一个内容已经讲了关于类好对象的初步的一些知识&…

Python量化交易学习——Part5:通过相关系数选择对收益率影响比重大的因子(1)

上一节中我们学习了如何通过单因子策略进行股票交易,在实际的股市中,因子(也就是指标)数量往往非常之多,比如市盈率/市净率/净资产收益率等,在使用这些因子的过程中,我们会发现有的因子与收益率为正相关,有的因子为负相关,而有些因子几乎完全无关。 所以我们可以通过计…

k8s笔记——kubernetes中的三种IP

kubernetes概念 Master&#xff1a;集群控制节点&#xff0c;每个集群需要至少一个master节点负责集群的管控 Node&#xff1a;工作负载节点&#xff0c;由master分配容器到这些node工作节点上&#xff0c;然后node节点上的docker负责容器的运行 Pod&#xff1a;kubernetes的…

JS-10-es6常用知识-对象扩展

目录 1 Object.assign&#xff1a;实现拷贝继承 2 扩展运算符(...) 1&#xff09;介绍 2&#xff09;数组中的扩展运算符 3&#xff09;对象中的扩展运算符 1 Object.assign&#xff1a;实现拷贝继承 1&#xff09;目的&#xff1a;Object.assign()方法在 JavaScript 中被…

Java线程中sleep()和wait()有什么区别

在Java线程中&#xff0c;sleep()和wait()是两个经常被提及但功能和使用场景完全不同的方法。以下是它们之间的主要区别&#xff1a; 所属类和用途&#xff1a; sleep() 是 Thread 类的一个静态方法&#xff0c;它用于使当前线程&#xff08;即调用 sleep() 的线程&#xff0…

C++访问越界

常见场景 访问数组元素越界vector容器访问等 vector<int>;vec<2>&#xff1b;字符串访问越界string str;str[2];array数组访问越界字符串处理&#xff0c;没有添加’\0’字符&#xff0c;导致访问字符串的时候越界了&#xff1b;使用类型强转&#xff0c;让一个大…

Flutter开发效率提升1000%,Flutter Quick教程之定义构造参数和State成员变量

一个Flutter页面&#xff0c;可以定义页面构造参数和State成员变量。所谓页面构造参数&#xff0c;就是当前页面构造函数里面的参数。 比如下面代码&#xff0c;a就是构造参数&#xff0c;a1就是State成员变量。 class Testpage extends StatefulWidget {String a;const Test…

docker学习--docker容器镜像常用命令大全(简)

文章目录 一、镜像命令二、容器管理命令 一、镜像命令 docker search #搜索镜像 docker pull/push #下载/上传镜像 docker images #查看所有本地主机上的镜像可以使用docker image ls代替 docker tag #源镜像名 新镜像名 docker rmi #删除镜像 docker image prune #移除没有标签…