programing

자동 증가 시작 번호를 변경하시겠습니까?

firstcheck 2023. 1. 21. 10:02
반응형

자동 증가 시작 번호를 변경하시겠습니까?

MySQL에는 테이블이 있으며, 이 테이블은auto_increment에 가치를 두다.5대신1이것이 가능합니까?또한 어떤 쿼리 스테이트먼트가 이 기능을 합니까?

사용할 수 있습니다.ALTER TABLEauto_interial 초기값을 변경하려면:

ALTER TABLE tbl AUTO_INCREMENT = 5;

자세한 내용은 MySQL 참조를 참조하십시오.

네, 사용하실 수 있습니다.ALTER TABLE t AUTO_INCREMENT = 42진술.단, 이로 인해 적어도 InnoDB 및 특정 MySQL 버전에서는 테이블 전체가 재구축될 수 있습니다.이미 수백만 개의 행이 있는 데이터 세트가 있는 경우 완료하는 데 매우 오랜 시간이 걸릴있습니다.

제 경험으로는 다음을 수행하는 것이 좋습니다.

BEGIN WORK;
-- You may also need to add other mandatory columns and values
INSERT INTO t (id) VALUES (42);
ROLLBACK;

이렇게 하면 트랜잭션을 롤백하더라도 MySQL은 자동 증가 값을 유지하며 변경 내용이 즉시 적용됩니다.

이것을 확인하려면 , 다음의 명령어를 발행합니다.SHOW CREATE TABLE t진술.다음 사항을 확인해 주십시오.

> SHOW CREATE TABLE t \G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
...
) ENGINE=InnoDB AUTO_INCREMENT=43 ...

MySQL에서 10부터 시작하여 1씩 자동 증분하는 방법:

create table foobar(
  id             INT PRIMARY KEY AUTO_INCREMENT,
  moobar         VARCHAR(500)
); 
ALTER TABLE foobar AUTO_INCREMENT=10;

INSERT INTO foobar(moobar) values ("abc");
INSERT INTO foobar(moobar) values ("def");
INSERT INTO foobar(moobar) values ("xyz");

select * from foobar;

'10', 'abc'
'11', 'def'
'12', 'xyz'

그러면 id 열이 10부터1씩 증가합니다.

MySQL에서 10부터 시작하여 5까지 자동 증가:

drop table foobar
create table foobar(
  id             INT PRIMARY KEY AUTO_INCREMENT,
  moobar         VARCHAR(500)
); 
SET @@auto_increment_increment=5;
ALTER TABLE foobar AUTO_INCREMENT=10;

INSERT INTO foobar(moobar) values ("abc");
INSERT INTO foobar(moobar) values ("def");
INSERT INTO foobar(moobar) values ("xyz");

select * from foobar;
'11', 'abc'
'16', 'def'
'21', 'xyz'

그러면 id 열은 10부터 시작하여 매번 5씩 증가합니다.

phpmyadmin을 사용하여 실행할 수도 있습니다.작업으로 이동하지 말고 테이블을 선택하십시오.또한 테이블 아래의 Auto increment 옵션을 변경합니다.시작 클릭 잊지 마세요.

테이블의 AUTO_INCREMENT 값을 자동 수정하는 절차

DROP PROCEDURE IF EXISTS update_auto_increment;
DELIMITER //
CREATE PROCEDURE update_auto_increment (_table VARCHAR(64))
BEGIN
    DECLARE _max_stmt VARCHAR(1024);
    DECLARE _stmt VARCHAR(1024);    
    SET @inc := 0;

    SET @MAX_SQL := CONCAT('SELECT IFNULL(MAX(`id`), 0) + 1 INTO @inc FROM ', _table);
    PREPARE _max_stmt FROM @MAX_SQL;
    EXECUTE _max_stmt;
    DEALLOCATE PREPARE _max_stmt;

    SET @SQL := CONCAT('ALTER TABLE ', _table, ' AUTO_INCREMENT =  ', @inc);
    PREPARE _stmt FROM @SQL;
    EXECUTE _stmt;
    DEALLOCATE PREPARE _stmt;
END//
DELIMITER ;

CALL update_auto_increment('your_table_name')

이 절차가 변수 필드 이름에 필요한 경우id이것은 도움이 될 수 있습니다.

DROP PROCEDURE IF EXISTS update_auto_increment;
DELIMITER //
CREATE PROCEDURE update_auto_increment (_table VARCHAR(128), _fieldname VARCHAR(128))
BEGIN
    DECLARE _max_stmt VARCHAR(1024);
    DECLARE _stmt VARCHAR(1024);    
    SET @inc := 0;

    SET @MAX_SQL := CONCAT('SELECT IFNULL(MAX(',_fieldname,'), 0) + 1 INTO @inc FROM ', _table);
    PREPARE _max_stmt FROM @MAX_SQL;
    EXECUTE _max_stmt;
    DEALLOCATE PREPARE _max_stmt;

    SET @SQL := CONCAT('ALTER TABLE ', _table, ' AUTO_INCREMENT =  ', @inc);
    PREPARE _stmt FROM @SQL;
    EXECUTE _stmt;
    DEALLOCATE PREPARE _stmt;
END //
DELIMITER ;

CALL update_auto_increment('your_table_name', 'autoincrement_fieldname');

테이블과 데이터를 내보내기만 하면 됩니다.sql을 다음과 같이 복사합니다.

CREATE TABLE IF NOT EXISTS `employees` (
  `emp_badgenumber` int(20) NOT NULL AUTO_INCREMENT,
  `emp_fullname` varchar(100) NOT NULL,
  `emp_father_name` varchar(30) NOT NULL,
  `emp_mobile` varchar(20) DEFAULT NULL,
  `emp_cnic` varchar(20) DEFAULT NULL,
  `emp_gender` varchar(10) NOT NULL,
  `emp_is_deleted` tinyint(4) DEFAULT '0',
  `emp_registration_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `emp_overtime_allowed` tinyint(4) DEFAULT '1',
  PRIMARY KEY (`emp_badgenumber`),
  UNIQUE KEY `bagdenumber` (`emp_badgenumber`),
  KEY `emp_badgenumber` (`emp_badgenumber`),
  KEY `emp_badgenumber_2` (`emp_badgenumber`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=111121326 ;

이제 자동 증분 값을 변경하고 sql을 실행합니다.

언급URL : https://stackoverflow.com/questions/970597/change-auto-increment-starting-number

반응형