如何在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
表中,稍后使用id
和payment_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' );