mysql 刺进数据 回来Iditjob - 超凡娱乐

mysql 刺进数据 回来Iditjob

2019-02-11 08:30:31 | 作者: 冰夏 | 标签: 函数,客户端,办法 | 浏览: 6504

三种回来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 ......
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表超凡娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章