不积跬步,无以至千里;不积小流,无以成江海。

Dean's blog

  • Join Us on Facebook!
  • Follow Us on Twitter!
  • LinkedIn
  • Subcribe to Our RSS Feed

MySQL批量修改自增长

MySQL可以直接修改表字段是否自增长,代码如下:

#设置字段为自增长
ALTER TABLE 表名 MODIFY 字段 BIGINT NOT NULL AUTO_INCREMENT;

#删除字段自增长
ALTER TABLE 表名 MODIFY 字段 BIGINT NOT NULL;

当在设置为自增长时,如果表没有主键,则会报错:

> 1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
> 时间: 0.038s

这时可以设置表自增长字段为主键,如下:

#设置字段为自增长 - 没有主键
ALTER TABLE 表名 MODIFY 字段 BIGINT NOT NULL  PRIMARY KEY AUTO_INCREMENT;

如果希望对全库所有表设置ID字段为主增长,可以参照以下语句:

SELECT CONCAT('ALTER TABLE ', t.table_name,' MODIFY id BIGINT NOT NULL ', CASE WHEN pk.table_name IS NULL THEN 'PRIMARY KEY' ELSE '' END ,' AUTO_INCREMENT;') 
FROM information_schema.TABLES t
	JOIN information_schema.Columns c USING(table_schema, table_name)
	LEFT JOIN(
		SELECT table_name, table_schema
		FROM information_schema.table_constraints tc
		JOIN information_schema.key_column_usage kcu USING (constraint_name,table_schema,table_name)
		WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_schema = schema()
	) pk USING(table_schema, table_name)
WHERE t.table_schema = schema()
	AND c.Column_name = 'id'

这里跟据表是否有主键,生成相应的SQL语句,执行所生成的语句即可。

不允许评论
粤ICP备17049187号-1