MySQL主键id丢失解决方案

适用场景:有备份的空表,现在某个正式环境由于误操作,数据存在,但是主键部分丢失,手动修改工作量大,可使用此方案。

SELECT
 concat('ALTER TABLE ', table_name, ' MODIFY COLUMN ', column_name, ' ', column_type,' NOT NULL FIRST,DROP PRIMARY KEY', ';' ) drop_pri_seq,
  concat( 'ALTER TABLE ', table_name, ' MODIFY COLUMN ', column_name, ' ', column_type, ' NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (', column_name, ');' ) sql_alter_table_seq 
FROM
    (
    SELECT
        t1.table_name,
        t1.auto_increment,
        t2.column_name,
				t2.column_type
    FROM
        (
        SELECT
            auto_increment,
            table_name 
        FROM
            information_schema.TABLES 
        WHERE
            table_name IN ( SELECT table_name FROM information_schema.`COLUMNS` c WHERE COLUMN_KEY = 'pri' AND EXTRA = 'auto_increment' ) 
            AND table_schema = 'sioc_3_3' 
        ) t1
    LEFT JOIN ( SELECT table_schema, table_name, column_name, column_type FROM information_schema.`COLUMNS` c WHERE COLUMN_KEY = 'pri' AND EXTRA = 'auto_increment' AND table_schema = 'sioc_3_3' ) t2 ON t1.table_name = t2.table_name 
    ) tt

table_schema :更换你自己的数据库

复制出组装拼接好的sql,运行一遍即可

默认值丢失

SELECT
    concat(
        'alter table ',
        TABLE_NAME,
        ' MODIFY COLUMN ',
        COLUMN_NAME,
				' ',
				column_type,
        ' default ',
        ( CASE WHEN LOCATE( 'varchar', COLUMN_TYPE ) = 1 THEN concat( '\'', COLUMN_DEFAULT, '\'' ) ELSE COLUMN_DEFAULT END ),
				( CASE WHEN is_nullable = 'yes' THEN concat(' NOT NULL ') else concat(' ')  END ),
				( CASE WHEN column_comment != '' THEN concat( ' COMMENT ', concat( '\'', column_comment, '\';' ) ) else concat(';')  END )       
) sql_alter_default 
FROM
    information_schema.`COLUMNS` c where    
		1 = 1 
    AND TABLE_SCHEMA = 'sioc_3_3' 
    AND COLUMN_DEFAULT IS NOT NULL 
    AND TABLE_NAME NOT LIKE 'bk_%'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木一番

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值