MySQL에는 테이블이 있으며 그 대신 auto_increment
값을 설정하려고합니다 . 이것이 가능하며 어떤 쿼리 문을 수행합니까?5
1
답변
ALTER TABLE
auto_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을 사용하여 수행 할 수도 있습니다. 조치로 이동하는 것보다 테이블을 선택하십시오. 그리고 테이블 아래의 자동 증분 옵션을 변경하십시오. 시작을 클릭하는 것을 잊지 마십시오
답변
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을 실행하십시오.