在一个事物当中包含了多张表的级联更新;
第一张需要更新的表是主表,其他从表和其相关,因此需要主表的主键,那么如何在mysql当中实现呢?
mysql有last_insert_id()这个函数
它的用法如下:记录下来备忘
它必需紧跟在insert 语句执行之后。
//执行insert语句先
$sql="insert into table (name1,name2,...) values('value1','values'...)";
dbx_query($db_link,$sql);
//找出最后一次插入记录的id
$select="select last_insert_id() ";
$result=dbx_query($db_link,$select);
$last_id=$result->data[0][0];
ps: $last_id=mysql_insert_id();
mysql_insert_id() 将 MySQL 内部的 C API 函数 mysql_insert_id() 的返回值转换成 long(PHP 中命名为 int)。如果 AUTO_INCREMENT 的列的类型是 BIGINT,则 mysql_insert_id() 返回的值将不正确。可以在 SQL 查询中用 MySQL 内部的 SQL 函数 LAST_INSERT_ID() 来替代。
LAST_INSERT_ID
自动返回最后一个 INSERT 或 UPDATE 操作为 AUTO_INCREMENT 列设置的第一个发生的值. 参考这里
The ID that was generated is maintained in the server on a per-connection basis.
LAST_INSERT_ID是基于单个connection的, 不可能被其它的客户端连接改变。
可以用 SELECT LAST_INSERT_ID(); 查询LAST_INSERT_ID的值.
Important: If you insert multiple rows using a single INSERT statement, LAST_INSERT_ID() returns the value generated for the first inserted row only.
使用单INSERT语句插入多条记录, LAST_INSERT_ID只返回插入的第一条记录产生的值. 比如
mysql> INSERT INTO t VALUES (NULL, 'aaaa'), (NULL, 'bbbb'), (NULL, 'cccc');
mysql> SELECT * FROM t;
+----+------+
| id | name |
+----+------+
| 1 | Bob |
| 2 | aaaa |
| 3 | bbbb |
| 4 | cccc |
+----+------+
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 2 |
+------------------+
ID 2 是在插入第一条记录aaaa 时产生的.
LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。
一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的。
但在多线程情况下,就不行了。在多用户交替插入数据的情况下max(id)显然不能用。
这就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update操作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。
分享到:
相关推荐
在MySQL数据库中,LAST_INSERT_ID()函数是一个非常实用的工具,尤其在处理多表关联或者需要获取最新插入记录的自增ID时。该函数的主要作用是返回最近一次执行的INSERT或UPDATE语句对具有AUTO_INCREMENT属性的列所...
在MySQL中,`last_insert_id()` 是一个非常有用的函数,它允许我们获取最后一条INSERT操作自动生成的ID值。这个函数通常与具有自动增长特性的主键字段一起使用,例如INT类型的`id`字段,当插入新记录时,MySQL会自动...
MySQL数据库管理系统中,LAST_INSERT_ID() 函数和 mysql_insert_id() 函数都可以用来获取最近一次INSERT操作生成的自增ID值。在PHP开发中,正确地使用这两个函数对于确保数据一致性及避免并发问题至关重要。本知识...
标题提到的"MYSQL 小技巧 — LAST_INSERT_ID"着重讨论了MySQL中获取自增ID的两种方法:`LAST_INSERT_ID()`和`mysql_insert_id()`的区别以及它们在不同情况下的适用性。 首先,`LAST_INSERT_ID()`函数是MySQL提供的...
在MySQL中,`last_insert_id()`是一个用于获取最后通过`INSERT`语句生成的自增ID的函数,尤其在自增主键列上非常有用。在大多数情况下,当你插入一条新记录并需要获取这个新生成的ID时,这个函数会派上用场。 在...
为了解决这个问题,我们可以利用MySQL的`LAST_INSERT_ID()`函数来生成并追踪各分表的唯一ID。 首先,我们需要创建一个单独的表,例如`ticket_mutex`,用于存储不同业务的ID值。这个表包含两个字段:`name`用于标识...
当遇到`bigint`类型的ID时,可以使用MySQL的内置函数`LAST_INSERT_ID()`来解决`mysql_insert_id()`的问题,如下所示: ```php $result = mysql_query("SELECT LAST_INSERT_ID()", $link); ``` `LAST_INSERT_ID...
在MySQL中,序列(Sequence)通常用于生成...总的来说,虽然MySQL不像某些数据库那样直接支持序列,但通过`LAST_INSERT_ID()`函数和巧妙的数据表设计,我们仍然可以在MySQL中实现序列的功能,满足获取唯一标识的需求。
`mysql_insert_id()`函数就是为了解决这一问题而设计的。它允许开发者在成功执行一个INSERT语句后,获取到自增ID,这对于追踪和管理数据库中的记录至关重要。 **前言** 在处理数据库事务时,特别是在内容管理系统或...
在MySQL中,这个功能可以通过`LAST_INSERT_ID()`函数实现。`LAST_INSERT_ID()`是一个非常实用的特性,它与特定的`Connection`对象相关联,而不是与具体的表相关,这意味着它会记录最近一次在当前连接中执行的`INSERT...
query = ("INSERT INTO employees (first_name, last_name) VALUES (%s, %s)") cursor.executemany(query, data) ``` 对于文件`www.pudn.com.txt`和`cihui_python_mySQL`,它们可能是包含SQL语句或数据库相关示例的...
- 如果你的应用环境中允许使用`LAST_INSERT_ID()`函数,可以通过执行如下SQL语句来获取最后插入记录的ID。 ```java Statement stmt = connection.createStatement(); stmt.executeUpdate("INSERT INTO test_...
总之,理解并有效利用MySQL的事务特性,如InnoDB的行级锁定和`LAST_INSERT_ID()`函数,可以在并发环境下保证自增ID的安全生成,避免冲突和重复。对于大型分布式系统,这样的设计是必不可少的,能够为业务逻辑提供...
3. 结果:在连接1中执行select LAST_INSERT_ID()得到的结果和连接2中执行select LAST_INSERT_ID()的结果是不同的;而在两个连接中执行select max(id)的结果是相同的。 其实在MSSQL中SCOPE_IDENTITY()和IDENT_...