如何在mysql中获取下一个id并将其插入表中
INSERT INTO payments (date, item, method, payment_code)
VALUES (NOW(), '1 Month', 'paypal', CONCAT("sahf4d2fdd45", id))
您可以使用
SET information_schema_stats_expiry = 0;
SELECT AUTO_INCREMENT
FROM information_schema.tables
WHERE table_name = 'table_name'
AND table_schema = DATABASE( );
information_schema_stats_expiry
值为86400,所以如果没有第一个语句(每个会话只需要一次),这种方法可能会返回过期的数据。Auto_increment
列中,但还会返回其他附加数据:SHOW TABLE STATUS LIKE 'table_name';
TABLES.AUTO_INCREMENT
被缓存。MySQL 博客也有多篇文章提到此事,但他们所提到的系统变量似乎已过时。 - BrunoSET information_schema_stats_expiry = 0;
。 - aetonsi您可以通过以下方式获取下一个自增值:
SHOW TABLE STATUS FROM tablename LIKE Auto_increment
/*or*/
SELECT `auto_increment` FROM INFORMATION_SCHEMA.TABLES
WHERE table_name = 'tablename'
请注意,不应使用这种方法来更改表格,而应使用自动增量列来自动执行此操作。last_insert_id()
是回顾性的,并且因此在当前连接中可以得到保证。SHOW TABLE STATUS
。SHOW TABLE STATUS
命令需要在 FROM
后面跟上 数据库名
,并在 LIKE
后面跟上 '表名模式'
。该命令用于查看数据库中表的状态信息。 - x-yuri这将返回MySQL数据库的自增值,我没有在其他数据库上进行验证。请注意,如果您正在使用任何其他数据库,则查询语法可能会不同。
SELECT AUTO_INCREMENT
FROM information_schema.tables
WHERE table_name = 'your_table_name'
and table_schema = 'your_database_name';
SELECT AUTO_INCREMENT
FROM information_schema.tables
WHERE table_name = 'your_table_name'
and table_schema = database();
顶部的答案使用了 PHP MySQL_ 解决方案,但我想分享一个更新的 PHP MySQLi_ 解决方案来实现这个。在这个示例中没有错误输出!
$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;
LAST_INSERT_ID()
函数。请注意修改翻译内容以符合此要求。 - Felipe Pereiramysqli_insert_id
来完成上述操作。 - treyBake一条简单的查询语句即可:SHOW TABLE STATUS LIKE 'table_name'
对于MySQL 8,使用SHOW CREATE TABLE
来检索下一个自增插入id:
SHOW CREATE TABLE mysql.time_zone
结果:
CREATE TABLE `time_zone` (
`Time_zone_id` int unsigned NOT NULL AUTO_INCREMENT,
`Use_leap_seconds` enum('Y','N') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
PRIMARY KEY (`Time_zone_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1784 DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Time zones'
请查看返回的查询结果的最后一行AUTO_INCREMENT=1784.
与插入的最后一个值进行比较:
select max(Time_zone_id) from mysql.time_zone
结果:
+-------------------+
| max(Time_zone_id) |
+-------------------+
| 1783 |
+-------------------+
在MySQL v8.0.20上进行了测试。
SELECT id FROM `table` ORDER BY id DESC LIMIT 1
auto_increment
列。 - knittlMAX
的所有其他答案都将失败。另一方面,大多数数据库设置会锁定information_schema
,因此@ravi404的答案可能会失败,但就稳健性而言,它是迄今为止最好的答案。 - Peter Chaula