欢迎各位兄弟 发布技术文章

这里的技术是共享的

LAST_INSERT_ID mysql_insert_id 获取插入记录自动编号

mysql教程 LAST_INSERT_ID() mysql_insert_id 获取insert数据的主键值自动编号

我们讲了关于mysql LAST_INSERT_ID() mysql_insert_id 获取insert数据的主键值自动编号那么来分析一下它们的区别吧
 mysql_insert_id ()是直接获取当前session的insert_id,而LAST_INSERT_ID()是SQL函数,需要通过执行SQL来获得,如:SELECT LAST_INSERT_ID();显然这两个效果是一样的,但执行一次SQL要耗费很多资源,不如直接通过mysql_insert_id()获得内存中的值快得多
 

$tablename ='test';
$conn = mysql_connect('127.0.0.1','root','12346');

$result = mysql_query ( 'UPDATE ' . $tablename . ' SET id=LAST_INSERT_ID(id+1)', $conn ); 
 if ($result === false) { 
  mysql_query ( 'CREATE TABLE ' . $tablename . ' (id INT NOT NULL)', $dbh ); 
 $rs = mysql_query ( 'SELECT COUNT(*) FROM ' . $tablename . ' LIMIT 1', $dbh );  
 if (mysql_result ( $rs, 0 ) == 0) { 
   mysql_query ( 'INSERT INTO ' . $tablename . ' VALUES (' . ($start_index - 1) . ')', $dbh ); 
 }  
 mysql_query ( 'UPDATE ' . $tablename . ' SET id=LAST_INSERT_ID(id+1)', $dbh );  
 }  
$return = mysql_insert_id ( $dbh );

//下面接着来看一个last_inert_id实例

$sql="insert into table (name1,name2,...) values('www.111cn.net','111cn.net'...)";

mysql_query($conn,$sql);
//找出最后一次插入记录的id
$select="select last_insert_id() ";
$result=mysql_query($db_link,$select);
$rs = mysql_fetch_array( $result );
$last_id=$rs[0];

//再来看一个官方的实例

mysql> USE test;
Database changed
mysql> CREATE TABLE t (
    ->   id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
    ->   name VARCHAR(10) NOT NULL
    -> );
Query OK, 0 rows affected (0.09 sec)

mysql> INSERT INTO t VALUES (NULL, 'Bob');
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM t;
+----+------+
| id | name |
+----+------+
|  1 | Bob  |
+----+------+
1 row in set (0.01 sec)

mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                1 |
+------------------+
1 row in set (0.00 sec)

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)

 


总结

mysql_insert_id() 将 MySQL 内部的 C API 函数 mysql_insert_id() 的返回值转换成 long(PHP 中命名为 int)。如果 AUTO_INCREMENT 的列的类型是 BIGINT,则 mysql_insert_id() 返回的值将不正确。可以在 SQL 查询中用 MySQL 内部的 SQL 函数 LAST_INSERT_ID() 来替代。

本站原创转载注明来源www.111cn.net

来自 http://www.111cn.net/database/110/LAST_INSERT_ID-mysql_insert_id.htm

 

last_insert_id()获取mysql最后一条记录ID
2012-10-30 12:38:32

 

last_insert_id()自动返回最后一个INSERT或 UPDATE 查询中 AUTO_INCREMENT列设置的第一个表发生的值。

MySQL的LAST_INSERT_ID的注意事项:

第一、查询和插入所使用的Connection对象必须是同一个才可以,否则返回值是不可预料的。

mysql> SELECT LAST_INSERT_ID();

        -> 100

使 用这函数向一个给定Connection对象返回的值是该Connection对象产生对影响AUTO_INCREMENT列的最新语句第一个 AUTO_INCREMENT值的。这个值不能被其它Connection对象的影响,即它们产生它们自己的AUTO_INCREMENT值。

第二、LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID返回表b中的Id值。

第三、 假如你使用一条INSERT语句插入多个行,  LAST_INSERT_ID() 只返回插入的第一行数据时产生的值。其原因是这使依靠其它服务器复制同样的 INSERT语句变得简单。

mysql> INSERT INTO t VALUES

    -> (NULL, ‘Mary’), (NULL, ‘Jane’), (NULL, ‘Lisa’);

mysql> SELECT * FROM t;

| id | name |

+—-+——+

|  1 | Bob  |

|  2 | Mary |

|  3 | Jane |

|  4 | Lisa |

mysql> SELECT LAST_INSERT_ID();  //这就是我要说明的关键问题。

| LAST_INSERT_ID() |

|                2 |

虽然将3 个新行插入 t, 对这些行的第一行产生的 ID 为 2, 这也是 LAST_INSERT_ID()返回的值。

第四、假如你使用 INSERT IGNORE而记录被忽略,则AUTO_INCREMENT 计数器不会增量,而 LAST_INSERT_ID() 返回0, 这反映出没有插入任何记录。

一 般情况下获取刚插入的数据的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的IDLAST_INSERT_ID是基于单个connection的, 不可能被其它的客户端连接改变。

 

用法:

 


  1. $sql="insert into `test` (`id`,`typeid`,`typeid2`) values (NULL,'$typeid','0')"
  2. mysql_query($sql,$conn); 
  3.  
  4. $sql01="SELECT LAST_INSERT_ID() as kk"
  5. $query01=mysql_query($sql01); 
  6. $row01=mysql_fetch_array($query01); 
  7. $lastid=$row01['kk']; 

 

来自 http://xuqin.blog.51cto.com/5183168/1043164

唯物品评历史

关注"唯物品评历史",跟着泪痕春雨先生,读懂历史,看彻人生

打开隐藏二维码