[SQL] MySQL의에서 다음 자동 증가 ID를 얻는 방법
SQLMySQL의에서 다음 자동 증가 ID를 얻는 방법
어떻게 테이블에 삽입하기 위해 MySQL의에서 다음 ID를 얻으려면
INSERT INTO payments (date, item, method, payment_code)
VALUES (NOW(), '1 Month', 'paypal', CONCAT("sahf4d2fdd45", id))
해결법
-
==============================
1.당신의 SQL 쿼리에서 LAST_INSERT_ID ()를 사용합니다.
당신의 SQL 쿼리에서 LAST_INSERT_ID ()를 사용합니다.
또는
당신은 또한 PHP를 사용하여 얻을 수에 mysql_insert_id ()를 사용할 수 있습니다.
-
==============================
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 ()을 소급이고 따라서 현재 연결에서 보장 될 수 있다는 것이다. 이 아기는 장래이므로 연결 당 고유하지 않습니다 및 신뢰할 수 없습니다. 만 단일 연결 데이터베이스에서 작동하지만, 단일 연결 데이터베이스 오늘 내일 다중 연결 데이터베이스가되는 습관을 가질 것이다.
참조 : 테이블 표시 상태
-
==============================
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.솔루션의 최고 응답 사용 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.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.해결책:
해결책:
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.간단한 쿼리 할 것 SHOW TABLE 상태 LIKE 'TABLE_NAME'
간단한 쿼리 할 것 SHOW TABLE 상태 LIKE 'TABLE_NAME'
-
==============================
9.당신은 MySQL의 트리거를 사용할 수 있습니다
당신은 MySQL의 트리거를 사용할 수 있습니다
-
==============================
10.당신은 삽입하는 동안 ID를 사용하지, 어느 쪽도 아니 당신이 그것을 필요로 할 수 없습니다. 당신이 그 기록을 삽입하는 경우 MySQL은 심지어 ID를 알 수 없습니다. 당신은 할 수 단지 나중에 payment_code 테이블에서 "sahf4d2fdd45"사용 ID와 payment_code 저장.
당신은 삽입하는 동안 ID를 사용하지, 어느 쪽도 아니 당신이 그것을 필요로 할 수 없습니다. 당신이 그 기록을 삽입하는 경우 MySQL은 심지어 ID를 알 수 없습니다. 당신은 할 수 단지 나중에 payment_code 테이블에서 "sahf4d2fdd45"사용 ID와 payment_code 저장.
당신이 정말로 그것을에서 ID를 가지고 당신의 payment_code이 필요하면 다음 ID를 추가 삽입 한 후 행을 업데이트합니다.
-
==============================
11.당신은 무엇을 다음 증분 ID가 필요합니까?
당신은 무엇을 다음 증분 ID가 필요합니까?
MySQL은 전용 테이블 당 하나의 자동 증가 필드를 허용하고 또한 보증 고유성에 기본 키가 있어야합니다.
당신이 다음 삽입 ID를 얻을 때 당신은 당신이 해당 트랜잭션의 범위 내에있는 값 때문에 사용할 때 사용하지 못할 수 있습니다. 따라서 데이터베이스의 부하에 따라 그 값은 이미 다음 요청이 들어올 때 사용할 수 있습니다.
난 당신이 다음에 할당 할 수있는 자동 증가 값을 알 필요하지 않도록 설계를 검토 할 것을 제안
-
==============================
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.당신은 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.사용 "에 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.
mysql_insert_id();
그게 다야 :)
-
==============================
16.
SELECT id FROM `table` ORDER BY id DESC LIMIT 1
나는 그것의 생산성이에 의심하지만 100 % 신뢰할 비록
-
==============================
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.@ 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.나에게는 작동하고, 간단한 같습니다
나에게는 작동하고, 간단한 같습니다
$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
from https://stackoverflow.com/questions/6761403/how-to-get-the-next-auto-increment-id-in-mysql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 SQL에서 복합 기본 키를 정의 할 수 있습니다? (0) | 2020.04.03 |
---|---|
[SQL] 합니까 외래 키 쿼리 성능을 향상? (0) | 2020.04.03 |
[SQL] MySQL의 쿼리 날짜에 타임 스탬프로 변환 (0) | 2020.04.03 |
[SQL] 왼쪽 외부 오라클 11g에서 + 기호를 사용하여 가입 (0) | 2020.04.03 |
[SQL] 어떻게 변수를 선언하고 동일한 오라클 SQL 스크립트에서 사용하는 방법? (0) | 2020.04.03 |