从 mysql 中的表中查找最后插入的 id-ag捕鱼王app官网

当前位置:ag捕鱼王app官网 > > 数据库 > mysql >

从 mysql 中的表中查找最后插入的 id

作者:迹忆客 最近更新:2024/03/26 浏览次数:

许多关于在 mysql 中查找一个表的最后插入 id 的文章。但是,很难找到任何关于使用两个表查找最后插入的 id 的教程。

在本文中,我们将尝试解决这种特殊情况,当然,我们还将探讨何时使用 last_insert_id() 命令。首先,让我们看看 auto_increment 是什么 id 以及它与 last_insert_id() 的关系。


mysql 中的 auto_increment id 是什么

在处理数据库时,我们通常需要特定表的 id 来作为主键。因为主键标识数据库中的记录,所以它必须是唯一的。

但是,我们如何保证主键始终是唯一的呢?另一种选择是使用一个公式来构造主键,该公式在添加数据之前验证该键在数据库中的存在。

这种策略可能会奏效,但它是困难的,而且并非万无一失。我们可以利用 mysql 的 auto_increment() 函数来创建主键以避免这种复杂性并确保它们始终是唯一的。

对于 int 数据类型,采用自动增量。int 数据类型有符号和无符号都支持值。

无符号数据类型只能存储正数。当新记录输入数据库时​​,自动增量允许自动创建唯一编号。

让我们看一个例子。

createtablecars(caridintnotnullauto_increment,namechar(30)notnull,primarykey(carid));

在我们现在创建表之后,我们可以插入值。我们也不需要为 carid 列指定值。

insertintocars(name)values('bmw'),('mercedes'),('audi');select*fromcars;

输出:

 ---- --------- 
| carid | name |
 ---- --------- 
|  1 | bmw     |
|  2 | mercedes|
|  3 | audi    |
 ---- --------- 

默认情况下,它将以 1 作为起始值,递增 1。如果我们需要从另一个值开始,我们可以更改新的值表。

altertablecarsauto_increment=32;

最后,我们在定义自增数字的数据类型时需要小心。例如,如果我们将其设置为 tinyint,它将限制记录数为 255。

我们可以使用 int 数据类型,因为它的限制足够大。所以现在我们对 auto_increment 函数了解很多,我们可以继续 last_insert_id() 函数。


在 mysql 中查找 auto_increment 列的最后插入 id

由于最近执行的 insert 语句,last_insert_id 返回为 auto_increment 列插入的第一个生成的 int。如果插入失败,则最后插入的 id 的值不会改变。

我们将为上面创建的表执行它。

selectlast_insert_id();

输出:

 ------------------ 
| last_insert_id() |
 ------------------ 
|                1 |
 ------------------ 

如你所见,即使 insert 语句在 cars 表中插入了三行,成功插入的第一行也是 id=1 的行。假设我们需要 insert 语句中的最后一个 id(在本例中为:3)。

我们将利用 mysql 的 max 函数。它返回当前特定列的最大值。

selectmax(carid)fromcars;

输出:

 ----------- 
| max(carid)|
 ----------- 
|         3 |
 ----------- 

现在我们来分析另一种情况,我们是在一张一张的往两张表中插入数据的时候,我们需要得到第一张表最后插入的 id。

createtablecars(caridintnotnullauto_increment,namechar(30)notnull,primarykey(carid));createtablecarmodels(otheridintnotnull,modelidintnotnullauto_increment,namechar(30)notnull,primarykey(modelid));altertablecarmodelsauto_increment=4;insertintocars(name)values('bmw');insertintocarmodels(otherid,name)values(last_insert_id(),'f30');selectlast_insert_id();

输出:

 ------------------ 
| last_insert_id() |
 ------------------ 
|                4 |
 ------------------ 

首先,让我们了解我们已经执行的代码。我们创建了两个表,即 carscarmodels

然后我们更改了 carmodels 的起始 id,以区分两个表的 id,并使用我们上面学习的方法将其设置为 4。我们可以从输出中看到它返回了第二个表的最后插入的 id。

如果我们需要最后插入的 cars 表 id 怎么办?

根据具体情况,我们可以通过多种方式做到这一点。我们将根据我们的情况来查看它们中的每一个。

在 mysql 中第一种方法:将 id 存储在变量中

在这种方法中,我们会将第一个表的最后插入的 id 存储在一个变量中,然后在第二个表中使用它,而不是直接调用 last_insert_id

insertintocars(name)values('bmw');set@last_id_in_cars=last_insert_id();insertintocarmodels(otherid,name)values(@last_id_in_cars,'f30');select@last_id_in_cars;

输出:

 ------------------ 
| @last_id_in_cars |
 ------------------ 
|               33 |
 ------------------ 

在选择变量之前,我们需要使用@符号。

第二种方法:从 mysql 中的第二个表中检索最后插入的 id

这是我们示例的一个特殊情况,因为我们在第二个表中使用了第一个表的最后插入 id。所以我们将从第二个表中检索它。

insertintocars(name)values('bmw');insertintocarmodels(otherid,name)values(last_insert_id(),'f30');selectotheridfromcarmodelswheremodelid=last_insert_id();

cars 表中获取 max(carid)

我们已经学习了函数 max 并且可以在这个例子中使用它。

insertintocars(name)values('bmw');insertintocarmodels(otherid,name)values(last_insert_id(),'f30');selectmax(carid)fromcars;

但是,高级工程师不推荐这种方法,因为它会在竞态条件下出​​错。当多个线程可以同时访问共享数据时,就会出现竞争条件。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 mysql 中声明和使用变量

发布时间:2024/03/26 浏览次数:115 分类:mysql

当你需要在 mysql 中的脚本中存储单个值时,最好的方法是使用变量。变量有不同的种类,有必要知道何时以及如何使用每种类型。

发布时间:2024/03/26 浏览次数:176 分类:mysql

本教程演示了如何在 mysql 中重置自动增量。

在 mysql 中实现刷新权限

发布时间:2024/03/26 浏览次数:211 分类:mysql

本教程介绍了 mysql 中的刷新权限命令,用于刷新授权表并影响允许的更改。

在 mysql 中设置时区

发布时间:2024/03/26 浏览次数:93 分类:mysql

在本教程中,我们将学习如何在 mysql 服务器中更改时区。

发布时间:2024/03/26 浏览次数:199 分类:mysql

本教程演示如何在 mysql 中转换为整数。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便
网站地图