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语句,执行所生成的语句即可。