改变自动增量的起始号码?
在MySQL中,我有一个表,我想设置auto_increment
值为5
而不是1
。 这是可能的,什么查询语句这样做?
您可以使用ALTER TABLE
来更改auto_increment初始值:
ALTER TABLE tbl AUTO_INCREMENT = 5;
有关更多详细信息,请参阅MySQL参考 。
是的,您可以使用ALTER TABLE t AUTO_INCREMENT = 42
语句。 但是,您需要知道,这将导致整个表的重build,至less在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
语句来validation这一点。 你应该看到:
> SHOW CREATE TABLE t \G *************************** 1. row *************************** Table: t Create Table: CREATE TABLE `t` ( ... ) ENGINE=InnoDB AUTO_INCREMENT=43 ...
如何自动递增1,从10开始MySQL:
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列从1开始递增1。
在MySQL中自动递增5,从10开始:
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列从5开始递增,从10开始。
自动修复表的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来完成。 只需select表格即可。 在表格选项下面更改自动增量。 不要忘了点击开始
只是用数据导出表…然后复制它的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。
- com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:连接closures后不允许任何操作
- 如何使用phpmyadmin编写存储过程以及如何通过php使用它?
- 为什么在DEFAULT子句中只能有一个CURRENT_TIMESTAMP的TIMESTAMP列?
- 使用SQL根据单个logging的更改更改多个logging
- Ansible幂等MySQL安装Playbook
- 使用CodeIgniter的活动logging将NOW()插入到数据库中
- MySQLstringreplace
- 如何执行UPSERT,以便我可以在更新部分中使用新值和旧值
- 如何使用MySQL Workbench进行MySQL数据库备份?