[mysql] 자동 증분 시작 번호를 변경 하시겠습니까?

MySQL에는 테이블이 있으며 그 대신 auto_increment값을 설정하려고합니다 . 이것이 가능하며 어떤 쿼리 문을 수행합니까?51



답변

ALTER TABLEauto_increment 초기 값을 변경하는 데 사용할 수 있습니다 .

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'

이렇게하면 10에서 시작하여 id 열이 1 씩 증가합니다.

10에서 시작하여 MySQL에서 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'

이렇게하면 10에서 시작하여 id 열이 5 씩 증가합니다.


답변

테이블의 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');


답변

phpmyadmin을 사용하여 수행 할 수도 있습니다. 조치로 이동하는 것보다 테이블을 선택하십시오. 그리고 테이블 아래의 자동 증분 옵션을 변경하십시오. 시작을 클릭하는 것을 잊지 마십시오
phpmyadmin에서 자동 증가


답변

data.를 사용하여 테이블을 내 보냅니다.

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을 실행하십시오.