如何在mysql中获得下一个自动递增的id

如何获取MySQL中的下一个ID将其插入到表中

INSERT INTO payments (date, item, method, payment_code) VALUES (NOW(), '1 Month', 'paypal', CONCAT("sahf4d2fdd45", id)) 

使用SQL查询中的LAST_INSERT_ID()

要么

你也可以使用mysql_insert_id()来使用PHP。

您可以使用

 SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'table_name' AND table_schema = DATABASE( ) ; 

或者如果你不想使用information_schema,你可以使用这个

 SHOW TABLE STATUS LIKE 'table_name' 

您可以通过执行以下操作获取下一个自动增量值:

 SHOW TABLE STATUS FROM tablename LIKE Auto_increment /*or*/ SELECT `auto_increment` FROM INFORMATION_SCHEMA.TABLES WHERE table_name = 'tablename' 

请注意,您不应该使用它来改变表格,而是使用auto_increment列来自动执行该操作。
问题是last_insert_id()是追溯的,因此可以保证在当前的连接。
这个宝宝是有前瞻性的,因此每个连接都不是唯一的,也不可靠。
只有在一个单一的连接数据库才能工作,但是今天的单一连接数据库有一个习惯,就是明天成为多个连接数据库。

最好的答案使用PHP MySQL_解决scheme,认为我会分享一个更新的PHP MySQLi_解决scheme来实现这一点。 在这个例子中没有错误输出!

 $db = new mysqli('localhost', 'user', 'pass', 'database'); $sql = "SHOW TABLE STATUS LIKE 'table'"; $result=$db->query($sql); $row = $result->fetch_assoc(); echo $row['Auto_increment']; 

踢出表中的下一个自动增量。

在PHP中,你可以试试这个:

 $query = mysql_query("SELECT MAX(id) FROM `your_table_name`"); $results = mysql_fetch_array($query); $cur_auto_id = $results['MAX(id)'] + 1; 

要么

 $result = mysql_query("SHOW TABLE STATUS WHERE `Name` = 'your_table_name'"); $data = mysql_fetch_assoc($result); $next_increment = $data['Auto_increment']; 

解:

 CREATE TRIGGER `IdTrigger` BEFORE INSERT ON `payments` FOR EACH ROW BEGIN SELECT AUTO_INCREMENT Into @xId FROM information_schema.tables WHERE Table_SCHEMA ="DataBaseName" AND table_name = "payments"; SET NEW.`payment_code` = CONCAT("sahf4d2fdd45",@xId); END; 

“DataBaseName”是我们的数据库的名称

你可以使用mysql触发器

插入时不能使用ID,也不需要。 插入logging时,MySQL甚至不知道该ID。 您可以将"sahf4d2fdd45"保存在payment_code表中,稍后使用idpayment_code

如果你真的需要你的payment_code有ID,那么在插入之后更新行以添加ID。

你需要什么下一个增量ID?

MySQL只允许每个表有一个自动增加字段,它也必须是保证唯一性的主键。

请注意,当您获取下一个插入ID时,由于您拥有的值仅在该事务的范围内,因此在使用它时可能无法使用。 因此,根据数据库的负载,在下一个请求进入时,该值可能已经被使用。

我build议你检查你的devise,以确保你不需要知道下一次要分配哪个自动增量值

简单的查询会做SHOW TABLE STATUS LIKE 'table_name'

这将返回MySQL数据库的自动增量值,我没有检查其他数据库。 请注意,如果您使用任何其他数据库,查询语法可能会有所不同。

 SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'your_table_name' and table_schema = database(); 

你必须连接到MySQL并select一个数据库,然后才能做到这一点

 $table_name = "myTable"; $query = mysql_query("SHOW TABLE STATUS WHERE name='$table_name'"); $row = mysql_fetch_array($query); $next_inc_value = $row["AUTO_INCREMENT"]; 

我build议重新考虑你在做什么。 我从来没有经历过需要特殊知识的单一用例。 下一个ID是一个非常特殊的实现细节,我不希望得到它是酸安全的。

做一个简单的事务,用最后一个ID更新插入的行:

 BEGIN; INSERT INTO payments (date, item, method) VALUES (NOW(), '1 Month', 'paypal'); UPDATE payments SET payment_code = CONCAT("sahf4d2fdd45", LAST_INSERT_ID()) WHERE id = LAST_INSERT_ID(); COMMIT; 

使用“mysql_insert_id()”。 mysql_insert_id()作用于上一次执行的查询,确保在生成值的查询后立即调用mysql_insert_id()。

以下是使用的例子:

 <?php $link = mysql_connect('localhost', 'username', 'password'); if (!$link) { die('Could not connect: ' . mysql_error()); } mysql_select_db('mydb'); mysql_query("INSERT INTO mytable VALUES('','value')"); printf("Last inserted record has id %d\n", mysql_insert_id()); ?> 

我希望上面的例子是有用的。

 mysql_insert_id(); 

而已 :)

 SELECT id FROM `table` ORDER BY id DESC LIMIT 1 

虽然我怀疑它的生产力,但它是100%可靠的

使用ravi404的答案:

 CREATE FUNCTION `getAutoincrementalNextVal`(`TableName` VARCHAR(50)) RETURNS BIGINT LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN DECLARE Value BIGINT; SELECT AUTO_INCREMENT INTO Value FROM information_schema.tables WHERE table_name = TableName AND table_schema = DATABASE(); RETURN Value; END 

在插入查询中使用,创build一个SHA1哈希。 例:

 INSERT INTO document (Code, Title, Body) VALUES ( sha1( getAutoincrementalNextval ('document') ), 'Title', 'Body' );