복붙노트

[SQL] MySQL의에서 다음 자동 증가 ID를 얻는 방법

SQL

MySQL의에서 다음 자동 증가 ID를 얻는 방법

어떻게 테이블에 삽입하기 위해 MySQL의에서 다음 ID를 얻으려면

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

해결법

  1. ==============================

    1.당신의 SQL 쿼리에서 LAST_INSERT_ID ()를 사용합니다.

    당신의 SQL 쿼리에서 LAST_INSERT_ID ()를 사용합니다.

    또는

    당신은 또한 PHP를 사용하여 얻을 수에 mysql_insert_id ()를 사용할 수 있습니다.

  2. ==============================

    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. ==============================

    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 ()을 소급이고 따라서 현재 연결에서 보장 될 수 있다는 것이다. 이 아기는 장래이므로 연결 당 고유하지 않습니다 및 신뢰할 수 없습니다. 만 단일 연결 데이터베이스에서 작동하지만, 단일 연결 데이터베이스 오늘 내일 다중 연결 데이터베이스가되는 습관을 가질 것이다.

    참조 : 테이블 표시 상태

  4. ==============================

    4.이것은 MySQL 데이터베이스에 대한 자동 증가 값을 반환하고 나는 다른 데이터베이스를 확인하지 않았다. 당신이 다른 데이터베이스를 사용하는 경우, 쿼리 구문이 다를 수 있습니다.

    이것은 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();
    
  5. ==============================

    5.솔루션의 최고 응답 사용 PHP mysql_로, 나는 이것을 달성하기위한 업데이트 된 PHP MySQLi_ 솔루션을 공유 할 것이라고 생각했다. 이 exmaple에 오류 출력이 없습니다!

    솔루션의 최고 응답 사용 PHP mysql_로, 나는 이것을 달성하기위한 업데이트 된 PHP MySQLi_ 솔루션을 공유 할 것이라고 생각했다. 이 exmaple에 오류 출력이 없습니다!

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

    다음 자동 추방 테이블에 올라오고 증가.

  6. ==============================

    6.PHP에서 당신이 시도 할 수 있습니다 :

    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'];
    
  7. ==============================

    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;
    

    "데이터베이스 이름은"우리의 데이터베이스의 이름입니다

  8. ==============================

    8.간단한 쿼리 할 것 SHOW TABLE 상태 LIKE 'TABLE_NAME'

    간단한 쿼리 할 것 SHOW TABLE 상태 LIKE 'TABLE_NAME'

  9. ==============================

    9.당신은 MySQL의 트리거를 사용할 수 있습니다

    당신은 MySQL의 트리거를 사용할 수 있습니다

  10. ==============================

    10.당신은 삽입하는 동안 ID를 사용하지, 어느 쪽도 아니 당신이 그것을 필요로 할 수 없습니다. 당신이 그 기록을 삽입하는 경우 MySQL은 심지어 ID를 알 수 없습니다. 당신은 할 수 단지 나중에 payment_code 테이블에서 "sahf4d2fdd45"사용 ID와 payment_code 저장.

    당신은 삽입하는 동안 ID를 사용하지, 어느 쪽도 아니 당신이 그것을 필요로 할 수 없습니다. 당신이 그 기록을 삽입하는 경우 MySQL은 심지어 ID를 알 수 없습니다. 당신은 할 수 단지 나중에 payment_code 테이블에서 "sahf4d2fdd45"사용 ID와 payment_code 저장.

    당신이 정말로 그것을에서 ID를 가지고 당신의 payment_code이 필요하면 다음 ID를 추가 삽입 한 후 행을 업데이트합니다.

  11. ==============================

    11.당신은 무엇을 다음 증분 ID가 필요합니까?

    당신은 무엇을 다음 증분 ID가 필요합니까?

    MySQL은 전용 테이블 당 하나의 자동 증가 필드를 허용하고 또한 보증 고유성에 기본 키가 있어야합니다.

    당신이 다음 삽입 ID를 얻을 때 당신은 당신이 해당 트랜잭션의 범위 내에있는 값 때문에 사용할 때 사용하지 못할 수 있습니다. 따라서 데이터베이스의 부하에 따라 그 값은 이미 다음 요청이 들어올 때 사용할 수 있습니다.

    난 당신이 다음에 할당 할 수있는 자동 증가 값을 알 필요하지 않도록 설계를 검토 할 것을 제안

  12. ==============================

    12.나는 당신이 무엇을하고 있는지 다시 생각하는 것이 좋습니다. 그 특별한 지식이 필요 하나의 사용 사례를 경험하지 않았다. 다음 ID는 아주 특별한 구현 세부이며 나는 그것이 ACID의 안전 점점에 포함되지 것입니다.

    나는 당신이 무엇을하고 있는지 다시 생각하는 것이 좋습니다. 그 특별한 지식이 필요 하나의 사용 사례를 경험하지 않았다. 다음 ID는 아주 특별한 구현 세부이며 나는 그것이 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. ==============================

    13.당신은 MySQL로 연결하고이 작업을 수행하기 전에 데이터베이스를 선택해야합니다

    당신은 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. ==============================

    14.사용 "에 mysql_insert_id ()". 에 mysql_insert_id ()는 최근 수행 쿼리에 작용, 즉시 값을 생성 쿼리 후)에 mysql_insert_id를 (호출해야합니다.

    사용 "에 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. ==============================

    15.

    mysql_insert_id();
    

    그게 다야 :)

  16. ==============================

    16.

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

    나는 그것의 생산성이에 의심하지만 100 % 신뢰할 비록

  17. ==============================

    17.ravi404의 대답을 사용하여 :

    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. ==============================

    18.@ ravi404의 개선, 경우에 오프셋 당신의 자동 증가는 1되지 않습니다 :

    @ 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의 값 또는 기본값을 추가, 이러한 가정을 버려야 할 필요가 그래서 DB 엔진이 1의 오프셋을 고려 alwaus 것 같다 : IFNULL (@@ auto_increment_offset, 1)

  19. ==============================

    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
    
  20. from https://stackoverflow.com/questions/6761403/how-to-get-the-next-auto-increment-id-in-mysql by cc-by-sa and MIT license