如何获取mysql中的下一个id以将其插入表中
INSERT INTO payments (date, item, method, payment_code)
VALUES (NOW(), '1 Month', 'paypal', CONCAT("sahf4d2fdd45", id))
Run Code Online (Sandbox Code Playgroud)
rav*_*404 241
您可以使用
SELECT AUTO_INCREMENT
FROM information_schema.tables
WHERE table_name = 'table_name'
AND table_schema = DATABASE( ) ;
Run Code Online (Sandbox Code Playgroud)
或者如果您不想使用information_schema,您可以使用它
SHOW TABLE STATUS LIKE 'table_name'
Run Code Online (Sandbox Code Playgroud)
Joh*_*ica 48
您可以通过执行以下操作获得下一个自动增量值:
SHOW TABLE STATUS FROM tablename LIKE Auto_increment
/*or*/
SELECT `auto_increment` FROM INFORMATION_SCHEMA.TABLES
WHERE table_name = 'tablename'
Run Code Online (Sandbox Code Playgroud)
请注意,您应不使用此修改表,使用AUTO_INCREMENT列要做到这一点,而不是自动.
问题是last_insert_id()
回顾性的,因此可以在当前连接中得到保证.
这个婴儿是有前途的,因此并非每个连接都是唯一的,不能依赖.
只有在一个连接数据库中它才能工作,但是今天的单一连接数据库有一个明天就会成为多个连接数据库的习惯.
Cha*_*ara 12
这将返回MySQL数据库的自动增量值,我没有检查其他数据库.请注意,如果您使用任何其他数据库,则查询语法可能会有所不同.
SELECT AUTO_INCREMENT
FROM information_schema.tables
WHERE table_name = 'your_table_name'
and table_schema = database();
Run Code Online (Sandbox Code Playgroud)
Sar*_*raz 11
使用LAST_INSERT_ID()
从您的SQL查询.
要么
您也可以mysql_insert_id()
使用PHP来获取它.
Hex*_*men 10
最佳答案使用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'];
Run Code Online (Sandbox Code Playgroud)
开始下表中的下一个自动增量.
在PHP中你可以试试这个:
$query = mysql_query("SELECT MAX(id) FROM `your_table_name`");
$results = mysql_fetch_array($query);
$cur_auto_id = $results['MAX(id)'] + 1;
Run Code Online (Sandbox Code Playgroud)
要么
$result = mysql_query("SHOW TABLE STATUS WHERE `Name` = 'your_table_name'");
$data = mysql_fetch_assoc($result);
$next_increment = $data['Auto_increment'];
Run Code Online (Sandbox Code Playgroud)
小智 6
解:
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;
Run Code Online (Sandbox Code Playgroud)
"DataBaseName"是我们数据库的名称
小智 6
对于 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'
Run Code Online (Sandbox Code Playgroud)
请参阅返回查询的最后一行的AUTO_INCRMENT=1784 。
与最后插入的值进行比较:
select max(Time_zone_id) from mysql.time_zone
结果:
+-------------------+
| max(Time_zone_id) |
+-------------------+
| 1783 |
+-------------------+
Run Code Online (Sandbox Code Playgroud)
在 MySQL v8.0.20 上测试。
SELECT id FROM `table` ORDER BY id DESC LIMIT 1
Run Code Online (Sandbox Code Playgroud)
虽然我怀疑它的生产力,但它是 100% 可靠的