插入一条记录返回该记录id方法

新近和Sobin在做一个精品课程的种类,因为用到一个恒定的id作为表间关联,所以在前四个表插入数据后要把插入数据变动的自增id传递给下三个表。研商了生龙活虎番操纵利用Mysql提供了贰个LAST_INSERT_ID()的函数。

三种回到mysql教程 插入一条记下重返该记录id方法

复制代码 代码如下:LAST_INSERT_ID
returns the first automatically generated value that was set for an
AUTO_INCREMENT column by the most recently executed INSERT or UPDATE
statement to affect such a column. For example, after inserting a row
that generates an AUTO_INCREMENT value, you can get the value like
this:mysql> SELECT LAST_INSERT_ID();-> 195

方法一

回顾说来,正是这些函数将回来插入的那条记下在表中自增的百般字段的值,常常大家都给那多少个自增字段命名叫ID。那样就能够回来刚插入的笔录的ID值了。

id int(11) not null pri key auto_increment,name
varchar(12),backup varchar(50)
今昔想插入一条记下的同期,再次来到她的id值(插入时只是插入name和backup字段的值)。请问该如何写那条语句。多谢!

复制代码 代码如下:$query=”INSERT INTO
`testtable` VALUES “;mysql_query;$query=”SELECT
LAST_INSERT_ID()”;$result=mysql_query;$rows=mysql_fetch_row;echo
$rows[0];

您的怀想完全多于。 无需锁表, 再次回到的ID鲜明是您的,基于当前三回九转session

那个函数是基于connection的,也正是不会被其余顾客端的connection影响到,所以结果是标准的。借使运用select
max from table,在高密度的插入诉求下,是有非常大可能出标题标,重临错误值

机关回到最后二个INSERT或 UPDATE 问询为 AUTO_INCREMENT列设置的率先个
爆发的值。

LAST_INSERT_ID说明

mysql> SELECT LAST_INSERT_ID();

从名字能够见见,LAST_INSERT_ID即为最终插入的ID值,根据MySQL的法定手册表明,它有2种选取格局

        -> 195

一是不带参数:LAST_INSERT_ID(卡塔尔,这种办法和AUTO_INCREMENT属性一同使用,当往带有‘AUTO_INCREMENT’属性字段的表中新扩展记录时,LAST_INSERT_ID(卡塔尔(قطر‎即再次回到该字段的值,我们可试下;二是包罗表达式:如下面介绍的LAST_INSERT_ID,它回到的是表明式的值,即‘value+1’;##################################LAST_INSERT_ID(卡塔尔国自动回到最终二个INSERT或 UPDATE 查询中
AUTO_INCREMENT列设置的第三个表发生的值。

发生的ID
每趟一而再后保存在服务器中。这表示函数向一个给定顾客端重返的值是该客户端发生对影响AUTO_INCREMENT列的新颖讲话首个AUTO_INCREMENT值的。这些值不可能被别的客商端影响,固然它们发出它们自个儿的
AUTO_INCREMENT值。那些作为保险了您可见找回本身的 ID
而不用忧郁其余客商端的移动,并且无需加锁或管理。
 

MySQL的LAST_INSERT_ID的注意事项:

mysql的源代码里面,mysql_insert_id是如此定义的
my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql)
{
  return mysql->;last_used_con->;insert_id;
}

首先、查询和插入所利用的Connection对象必需是同叁个才足以,不然重临值是不行预期的。

MYSQL提必要c++,php教程等的API经常,有个MYSQL布局体。
构造体里面有insert_id, insert_id的类型 my_ulonglong。 其实正是long
long.

mysql> SELECT LAST_INSERT_ID();

每次mysql_query操作在mysql服务器上可以见到为贰回“原子”操作,
数据库教程的写操作通常须要锁表的,
是mysql应用服务器锁表不是我们的应用程序锁表。

行使这函数向一个给定Connection对象回来的值是该Connection对象发生对影响AUTO_INCREMENT列的风尚讲话第多个AUTO_INCREMENT值的。这些值不能够被别的Connection对象的影响,即它们发出它们本人的AUTO_INCREMENT值。

 

第二、LAST_INSERT_ID
是与table非亲非故的,假设向表a插入数据后,再向表b插入数据,LAST_INSERT_ID返回表b中的Id值。

方法二

其三、 即令你选用一条INSERT语句插入多少个行, LAST_INSERT_ID(卡塔尔(英语:State of Qatar)只回去插入的率先行数据时爆发的值。其缘由是这使依据任何服务器复制同样的
INSERT语句变得轻巧。

Mysql提供了二个LAST_INSERT_ID()的函数。

mysql> INSERT INTO t VALUES

LAST_INSERT_ID() (with no argument) returns the first automatically
generated value that was set for an AUTO_INCREMENT column by the most
recently executed INSERT or UPDATE statement to affect such a column.
For example, after inserting a row that generates an AUTO_INCREMENT
value, you can get the value like this:

mysql> SELECT * FROM t;

mysql> SELECT LAST_INSERT_ID();
        ->
195简单说来,正是其风姿浪漫函数将回到插入的那条记下在表中自增的可怜字段的值,日常大家都给那多个自增字段命名称为ID。那样就足以回来刚插入的记录的ID值了。

| id | name |

贰个大致的例证:

| 1 | Bob |

$query=”INSERT INTO `testtable` (`clou1`,`clou2`) VALUES
(‘testvalue’,’test’)”;
mysql_query($query);
$query=”SELECT LAST_INSERT_ID()”;
$result=mysql_query($query);
$rows=mysql_fetch_row($result);
echo $rows[0];那样就能够重临刚插入的记录的ID值了。
值得注意的是,假诺你二次插入了多条记下,这么些函数重回的是率先个记录的ID值。

| 2 | Mary |

mysql> INSERT INTO t VALUES
    -> (NULL, ‘Mary’), (NULL, ‘Jane’), (NULL, ‘Lisa’);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

| 3 | Jane |

mysql> SELECT * FROM t;
+—-+——+
| id | name |
+—-+——+
|  1 | Bob  |
|  2 | Mary |
|  3 | Jane |
|  4 | Lisa |
+—-+——+
4 rows in set (0.01 sec)

| 4 | Lisa |

mysql> SELECT LAST_INSERT_ID();
+——————+
| LAST_INSERT_ID() |
+——————+
|                2 |
+——————+
1 row in set (0.00
sec卡塔尔(قطر‎这几个函数是依据connection的,相当于不会被其余客商端的connection影响到,所以结果是纯正的。纵然利用select
max(id卡塔尔 from table,在高密度的插入央求下,是有非常的大可能率出标题标,再次回到错误值。

mysql> SELECT LAST_INSERT_ID(卡塔尔(قطر‎; //那就是自己要验证的关键难题。

方法三

| LAST_INSERT_ID() |

.select max(id) from user;
2.select last_insert_id() as id from user limit 1; 
(这一个测验的回到id一贯是0,有一点难点卡塔尔国
3.积攒进程
1)
oracel中
create sequence seqID
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
nocache
order;
create or replace procedure sp_insert(aName int,rst out int) is
begin
  insert into tablename(id,name) values(seqID.nextval,aName);
  rst:=seqID.currval;
end;
2)mysql中实现
DELIMITER $$
DROP PROCEDURE IF EXISTS `test` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(in name
varchar(100),out oid int)
BEGIN
  insert into user(loginname) values(name);
  select max(id) from user into oid;
  select oid;
END $$
DELIMITER ;
接下来实践
call test(‘gg’,@id);
就返回id ……

虽说将3 个新行插入 t, 对那几个行的第大器晚成行发生的 ID 为 2, 那也是
LAST_INSERT_ID(卡塔尔(قطر‎再次回到的值。

插入一条记下再次回到该记录id方法
方法后生可畏 id int(11) not null pri key auto_increment,name
varchar(12),backup varchar(50) 未来想插…

上述所述正是本文的全体内容了,希望大家能够心仪。

请您花一点光阴将稿子分享给你的恋人可能留下钻探。我们将会由衷多谢您的支撑!