Как получить следующий идентификатор автоинкремента в mysql

Как получить следующий id в mysql, чтобы вставить его в таблицу

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

Ответ 1

Используйте LAST_INSERT_ID() из вашего SQL-запроса.

или

Вы также можете использовать mysql_insert_id(), чтобы получить его с помощью PHP.

Ответ 2

Вы можете использовать

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

или если вы не хотите использовать information_schema, вы можете использовать этот

SHOW TABLE STATUS LIKE 'table_name'

Ответ 3

Вы можете получить следующее значение автоинкремента, выполнив:

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() является ретроспективным и, таким образом, может быть гарантировано в текущем соединении.
Этот ребенок перспективен и, следовательно, не уникален для каждой связи, и на него нельзя положиться.
Это будет работать только в одной базе данных соединений, но сегодня у отдельных баз данных соединений есть привычка превращаться в несколько баз данных соединений завтра.

Смотрите: SHOW TABLE STATUS

Ответ 4

Верхний ответ использует 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'];

Вызывает следующий автоматический приращение в таблице.

Ответ 5

В 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'];

Ответ 6

Это вернет значение автоинкремента для базы данных MySQL, и я не проверял другие базы данных. Обратите внимание, что если вы используете любую другую базу данных, синтаксис запроса может отличаться.

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

Ответ 7

Решение:

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" - это название нашей базы данных

Ответ 9

Простой запрос SHOW TABLE STATUS LIKE 'table_name'

Ответ 10

Вы не можете использовать идентификатор во время вставки, и он вам не нужен. MySQL даже не знает идентификатор, когда вы вставляете эту запись. Вы можете просто сохранить "sahf4d2fdd45" в таблице payment_code и позже использовать id и payment_code.

Если вам действительно нужен ваш платежный_код, чтобы иметь идентификатор в нем, затем ОБНОВЛЯЙТЕ строку после вставки, чтобы добавить идентификатор.

Ответ 11

Для чего нужен следующий инкрементный идентификатор?

MySQL допускает только одно поле auto-increment для таблицы, и оно также должно быть основным ключом, гарантирующим уникальность.

Обратите внимание, что когда вы получите следующий идентификатор вставки, он может быть недоступен, когда вы используете его, поскольку имеющееся у вас значение находится только в пределах этой транзакции. Поэтому в зависимости от нагрузки на вашу базу данных это значение может быть использовано к моменту поступления следующего запроса.

Я бы посоветовал вам просмотреть ваш дизайн, чтобы убедиться, что вам не нужно знать, какое значение автоинкремента присваивает следующий

Ответ 12

Я предлагаю переосмыслить то, что вы делаете. Я никогда не испытывал один случай использования, когда требуются специальные знания. Следующий идентификатор - это очень специфическая деталь реализации, и я не буду рассчитывать на то, что она безопасна для ACID.

Сделайте одну простую транзакцию, которая обновляет вашу вставленную строку с последним 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;

Ответ 13

Вам нужно подключиться к MySQL и выбрать базу данных, прежде чем вы сможете это сделать

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

Ответ 14

используйте "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());
    ?>

Я надеюсь, что пример выше полезен.

Ответ 15

mysql_insert_id();

Что это:)

Ответ 16

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

Хотя я сомневаюсь в его продуктивности, но на 100% надежной

Ответ 17

используя ответ 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

используя в вашем запросе вставки, для создания хэша SHA1. например:.

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

Ответ 18

Улучшение @ravi404, если смещение автоинкремента НЕ равно 1:

SELECT ('auto_increment'-1) + IFNULL(@@auto_increment_offset,1) 
FROM INFORMATION_SCHEMA.TABLES
WHERE table_name = your_table_name
AND table_schema = DATABASE( );

(auto_increment -1): кажется, что механизм БД всегда учитывает смещение 1. Поэтому вам нужно отказаться от этого предположения, а затем добавить необязательное значение @@auto_increment_offset или значение по умолчанию 1: IFNULL (@@auto_increment_offset, 1)

Ответ 19

Для меня это работает, и выглядит просто:

 $auto_inc_db = mysql_query("SELECT * FROM my_table_name  ORDER BY  id  ASC ");
 while($auto_inc_result = mysql_fetch_array($auto_inc_db))
 {
 $last_id = $auto_inc_result['id'];
 }
 $next_id = ($last_id+1);


 echo $next_id;//this is the new id, if auto increment is on