`

mysql 返回插入记录的id

 
阅读更多

http://www.111cn.net/database/110/106fc8201f1219d8e9dd012b626a4317.htm 

 

 

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

方法一

id int(11) not null pri key auto_increment,name varchar(12),backup varchar(50)
现在想插入一条记录的同时,返回他的id值(插入时只是插入name和backup字段的值)。请问该如何写这条语句。谢谢!

你的担心完全多于。 不需要锁表, 返回的ID肯定是你的,基于当前连接session

自动返回最后一个INSERT或 UPDATE 问询为 AUTO_INCREMENT列设置的第一个 发生的值。

mysql> SELECT LAST_INSERT_ID();

        -> 195

产生的ID 每次连接后保存在服务器中。这意味着函数向一个给定客户端返回的值是该客户端产生对影响AUTO_INCREMENT列的最新语句第一个 AUTO_INCREMENT值的。这个值不能被其它客户端影响,即使它们产生它们自己的 AUTO_INCREMENT值。这个行为保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁或处理。

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

MYSQL提供给c++,php教程等的API一般,有个MYSQL结构体。
结构体里面有insert_id, insert_id的类型 my_ulonglong。 其实就是long long.

每次mysql_query操作在mysql服务器上可以理解为一次“原子”操作, 数据库教程的写操作常常需要锁表的, 是mysql应用服务器锁表不是我们的应用程序锁表。

 

方法二

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

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 LAST_INSERT_ID();
        -> 195简单说来,就是这个函数将返回插入的那条记录在表中自增的那个字段的值,一般我们都给那个自增字段命名为ID。这样就可以返回刚插入的记录的ID值了。

一个简单的例子:

$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值。

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

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

mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                2 |
+------------------+
1 row in set (0.00 sec)这个函数是基于connection的,也就是不会被其他客户端的connection影响到,所以结果是准确的。如果使用select max(id) from table,在高密度的插入请求下,是有可能出问题的,返回错误值。

方法三

.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 ......

分享到:
评论

相关推荐

    MyBatis+MySQL 返回插入的主键ID的方法

    本篇文章主要介绍了MyBatis+MySQL 返回插入的主键ID的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

    防止mysql重复插入记录的方法

    防止mysql重复插入记录的方法有很多种,常用的是ignore,Replace,ON DUPLICATE KEY UPDATE,当然我们也可以在php中加以判断了。 方案一:使用ignore关键字 如果是用主键primary或者唯一索引unique区分了记录的唯一性,...

    MySql避免重复插入记录的几种方法

    如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用: 代码如下: INSERT IGNORE INTO `table_name` (`email`, `phone`, `user_id`) VALUES (‘test9@163.com’, ‘99999’, ...

    MySQL命令大全

    例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为的名为Tom的成绩为.45, 编号为 的名为Joan 的成绩为.99,编号为 的名为Wang 的成绩为.5. mysql>insert into MyClass values(1,’Tom’,96.45),(2,’Joan...

    MySQL中文参考手册.chm

    MySQL中文参考手册.chm 449kb <br/>0 译者序 1 MySQL的一般的信息 1.1 什么是MySQL? 1.2 关于本手册 1.2.1 本手册中使用的约定 1.3 MySQL的历史 1.4 MySQL的主要特征 1.5...

    MySQL中文参考手册

    * 1 MySQL的一般的信息 o 1.1 什么是MySQL? o 1.2 关于本手册 + 1.2.1 本手册中使用的约定 o 1.3 MySQL的历史 o 1.4 MySQL的主要特征 o 1.5 MySQL稳定性? o 1.6 顺应2000年 o 1.7 SQL一般信息和教程 o ...

    mysql数据库的基本操作语法

    MySQL中外键的table的外键引用列可以插入数据可以为null,不参照主表的数据。 使用子查询插入数据 insert into temp(name) select name from classes; 多行插入 insert into temp values(null, ‘jack’, 22), ...

    MYSQL常用命令大全

    例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为1的名为Tom的成绩为96.45, 编号为2 的名为Joan 的成绩为82.99,编号为3 的名为Wang 的成绩为96.5. mysql> insert into MyClass values(1,'Tom',96.45),(2,...

    Node.js数据库操作之查询MySQL数据库(二)

    前言 我们在上一篇文章《Node.js数据库操作之连接...第一个参数是一个SQL语句,可以是任意的数据库语句,而第二个参数是一个回调函数,查询结果通过回调参数的方式返回。 connection.query( 'select * from book wh

    mysql数据库my.cnf配置文件

    适用于在一次性插入100-1000+条记录时, 提高效率。默认值是8M。可以针对数据量的大小,翻倍增加。 myisam_sort_buffer_size = 1024M # MyISAM设置恢复表之时使用的缓冲区的尺寸,当在REPAIR TABLE或用CREATE INDEX...

    mysql快速添加百万条记录的语句

    使用Insert Select语句插入记录时,必须遵循以下原则。用Select语句选择数据时,不能从被插入数据的表中选择行。指定插入的表后所包含的字段数目必须与Select语句中返回的字段数目相同。指定插入的表后所包含的字段...

    mysql中replace into的用法详解

    replace into语句会根据唯一键/主键删除原有的一条记录, 并且插入一条新的记录来替换原记录。如果没有表不存在唯一键/主键 或者 插入的数据唯一键/主键没有重复的,那么会新增一条记录。 新建一个test表,三个字段...

    MySql基本查询、连接查询、子查询、正则表达查询讲解

    比如说插入 [sql] view plain copy insert into STUDENT values(2021,'天下无镜',14,'男'); 然后 [sql] view plain copy select * from STUDENT where STU_NAME LIKE '_下_'; 查询的结果为空 但是如果下后面加两...

    PHP和MySQL Web开发第4版pdf以及源码

    10.2 在数据库中插入数据 10.3 从数据库中获取数据 10.3.1 获取满足特定条件的数据 10.3.2 从多个表中获取数据 10.3.3 以特定的顺序获取数据 10.3.4 分组与合计数据 10.3.5 选择要返回的行 10.3.6 使用子查询...

    Java-com-Mqtt-e-MySql:基本上,一种软件可以保存一些项目,返回该项目的ID并将其发布在主题teste_SD中,而其他软件则可以使用该ID,搜索保存的内容,取得这些项目并在另一个数据库中进行复制

    之后,您将在Mosquitto中发布插入ID的出版物。 通过输入将由第一软件执行的Mosquitto,第二软件将在网络上进行侦听。 当他收到消息时,他必须打开数据库,检索在第一个软件中记录的信息,并将此信息记录在另一个...

    PHP和MySQL WEB开发(第4版)

    10.2 在数据库中插入数据 10.3 从数据库中获取数据 10.3.1 获取满足特定条件的数据 10.3.2 从多个表中获取数据 10.3.3 以特定的顺序获取数据 10.3.4 分组与合计数据 10.3.5 选择要返回的行 10.3.6 使用子查询 10.4 ...

    MysqlDLL,C#操作MYSQL数据库

    //使 SqlDataReader 前进到下一条记录  GetType();//获取当前实例的 Type  NextResult();//当读取批处理 Transact-SQL 语句的结果时,使数据读取器前进到下一个结果 4、SqlDataApater类  构造方法:...

    西电2023春季数据库选修上机 只有2.3.4次的,第一次是当堂完成的,是安装mysql,创建删除数据库,比较简单没留样

    (5)对表中记录进行插入、修改、删除: ①向student表的sno,sname,ssex,sbirth字段插入数据; ②更新student表中sno值为152011的记录,将sclass字段的值变为“人工智能05”,将zno字段的值变为“1513”; ③删除...

    MySql分组后随机获取每组一条数据的操作

    思路:先随机排序然后再分组就好了。 1、创建表: CREATE TABLE `xdx_test` ( `id` int(11) NOT NULL, ...2、插入数据 INSERT INTO xdx_test VALUES (1, '张三-1','1'); INSERT INTO xdx_test VALUES (2, '李四-1',

    PHP和MySQL Web开发第4版

    10.2 在数据库中插入数据 10.3 从数据库中获取数据 10.3.1 获取满足特定条件的数据 10.3.2 从多个表中获取数据 10.3.3 以特定的顺序获取数据 10.3.4 分组与合计数据 10.3.5 选择要返回的行 10.3.6 使用子查询...

Global site tag (gtag.js) - Google Analytics