`

alter ignore table 添加unique key不生效的问题和临时解决方案

 
阅读更多

      遇到一个需求,已有的一个表,需要把已有的一个普通索引变成唯一索引,表数据量大约在百万级别,duplicate的量大约在几K左右。想到了使用alter ignore table (http://dev.mysql.com/doc/refman/5.5/en/alter-table.html),于是便找了一个测试库,发现依旧报uk冲突:

 

root@test 12:55:26>alter ignore table vertical_bail_detail_0007 add unique key uk_ooid(out_order_id);
ERROR 1062 (23000): Duplicate entry 'GT2-18578' for key 'uk_ooid'

 

      开始怀疑是mysql版本的问题,于是在5.1.48和5.5.18上都试了一遍,结果一样,于是便找了一下mysql的bug,发现确实是一个innodb的bug,链接(http://bugs.mysql.com/bug.php?id=65731;http://bugs.mysql.com/bug.php?id=40344)

     bug#40344里面提到了一个解决方法:workaround is to first run "set session old_alter_table=1;"试了一下,确实可以。

 

root@test 01:41:52>set session old_alter_table =on;
Query OK, 0 rows affected (0.00 sec)
root@test 01:42:44>alter ignore table vertical_bail_detail_0007 add unique key uk_ooid(out_order_id),drop index IDX_BAIL_DETAIL_OOID;
Query OK, 1430517 rows affected (1 min 11.19 sec)
Records: 1430517  Duplicates: 103  Warnings: 0

 

ps1:注意,如果你要是想使用set session old_alter_table =on;来解决这个问题,而且有是有主备的情况,记得执行前设置一下set session sql_log_bin=off.以免备库报错,同样,还需要再备库重复一下主库的操作。

 

ps2:看了一下bug的时间,08年提的bug,12年才有人close,而且还是到5.6.6才给close,不得不吐槽一下,bug的fix周期真久...

 -----

最近看fast index creation,官方文档上列出过这个问题(http://dev.mysql.com/doc/refman/5.5/en/innodb-create-index-limitations.html)

 

 

分享到:
评论

相关推荐

    SQL Server中alter table一些用法.doc

    SQL Server 中 Alter Table 语句的主要作用是对已经创建的表进行修改、添加、删除约束、修改表结构等操作。下面是 Alter Table 语句的一些用法: 添加约束 Alter Table 语句可以用来添加约束到已经创建的表中,...

    ALTER TABLE table_name

    在 Oracle 数据库中,`ALTER TABLE` 语句用于动态地修改表结构而不影响已有的数据。Oracle 支持多种数据类型,如字符串类型 (`VARCHAR2`, `CHAR`), 数值类型 (`NUMBER`, `FLOAT`), 日期类型 (`DATE`) 等。 #### ...

    修改表 1、添加字段: alter table 表名add column 字段名 数据类型 位置 ; 2、删除字段: a

    本文将详细阐述如何使用`ALTER TABLE`来执行各种操作,包括添加字段、删除字段、修改字段、改变字段数据类型、更改表引擎、重命名表、移动表至其他数据库、添加和删除主键、外键以及索引。 1. **添加字段**: 使用...

    alter table test rename test1; --修改表名alter table test add colum

    在MySQL中,`ALTER TABLE`语句是一种非常实用的工具,它允许用户修改现有表的结构,包括但不限于添加、删除或修改列、更改表名以及调整表的存储引擎等。这种灵活性极大地提高了数据库管理的效率,使得开发人员能够在...

    alter table 2.zip_ALTER_Table_csharp_sql

    - **添加约束**: 包括主键、外键、唯一性约束等,例如:`ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY (列名);` - **删除约束**: `ALTER TABLE 表名 DROP CONSTRAINT 约束名;` - **更改索引**: 可以添加...

    SQL中的ALTER TABLE语句详解.pdf

    ### SQL中的ALTER TABLE语句详解 #### 一、概述 在数据库管理中,经常会遇到需要对已有的表结构进行修改的情况。例如,可能需要添加新的字段、修改字段的数据类型、删除不再使用的字段或者更改索引等。这时就需要...

    Alter-Table.rar_Table

    在数据库管理中,`ALTER TABLE` 和 `CREATE TABLE` 是两个非常重要的SQL语句,用于对已有表格结构进行修改和创建新的表格结构。在Access和VB6(Visual Basic 6)环境中,这些功能同样得到支持,尽管它们可能具有与...

    alter table move相关知识研究

    在本篇文章中,我们将深入探讨`ALTER TABLE MOVE`的相关知识,以及它在实际数据库管理和优化中的应用。 首先,`ALTER TABLE MOVE`的主要用途是改善表的性能。当表的数据文件(datafile)过大或者需要进行表空间迁移...

    alter sql 语句实例

    它可以通过更改、添加、删除列和约束,或者通过启用或禁用约束和触发器来更改表的定义。 ALTER TABLE 语句有多种子形式,包括: 1. ADD COLUMN:向表中添加一个新的字段。语法与 CREATE TABLE 中的语法相同。 ...

    MySQL唯一索引重复插入数据解决方案总结.docx

    MySQL 唯一索引重复插入数据解决方案总结是指在 MySQL 中遇到唯一索引重复插入数据时的解决方案,可以使用 ignore 语句或 on duplicate key update 语句来解决该问题,并且可以根据具体情况选择合适的解决方案。

    mysql alter table 修改表命令详细介绍

    本文将深入探讨`ALTER TABLE`的使用,包括添加、修改和删除字段、索引、主键等操作,并通过实例来解释这些概念。 首先,`ALTER TABLE`的基本语法如下: ```sql ALTER [IGNORE] TABLE tbl_name alter_specification...

    mysql alter table命令修改表结构实例

    MySQL的`ALTER TABLE`命令是数据库管理中非常重要的一个功能,它允许用户在不丢失已有数据的情况下修改表的结构。这个命令广泛应用于调整数据库设计,如添加或删除字段,更改字段属性,设置或删除主键,添加索引等。...

    MySQL Alter Table 修改表信息.docx

    MySQL Alter Table 语句是一种 poderosa 语句,允许用户修改表信息,包括增加或删减字段、更改字段的数据类型和属性、创建或取消索引、修改表的评注和表的类型等。 增加字段 ALTER TABLE 语句可以增加新字段,语法...

    sql中的alter命令

    `ALTER`命令主要用于修改数据库表结构,常见的操作包括但不限于添加新列、删除现有列、更改列的数据类型等。这对于维护和优化数据库非常重要。 ### 添加新列 (Add Column) `ALTER`命令可以通过`ADD COLUMN`语法来...

    MySQL ALTER语法的运用方法

    MySQL的ALTER TABLE语句是数据库管理系统中用于修改已有表格结构的关键命令,它允许数据库管理员对已存在的表进行各种更改,包括添加、删除或修改列,添加或删除索引,更改表名,以及调整表的存储引擎和参数。...

    alter 的使用方法

    除了上述提到的添加字段和设置主键外,`ALTER TABLE`命令还可以进行以下操作: #### 1. 删除字段 如果需要删除表中的某个字段,可以使用如下命令: ```sql ALTER TABLE 表名 DROP COLUMN 字段名; ``` #### 2. ...

    alter提升各种数据库脚本的方法

    `语法不支持,需要使用`ALTER TABLE table_name DROP (column_name) ENABLE;`并配合约束条件使用。 **示例:** - **MySQL:** 向表`sc_cig_info`中添加`ci_prod_end_time`字段。 ```sql ALTER TABLE sc_cig_info ...

    java web项目单线程

    Alter table student add primary key (sno); 删除主键: Alter table student drop primary key; 删除表: Drop table student; 设外键: Alter table score add foreign key(列名) references 表名(列名) 设...

    mysql alter table修改表命令整理

    MYSQL ALTER TABLE命令用于修改表结构,例如添加/修改/删除字段、索引、主键等等,本文章通过实例向大家介绍MYSQL ALTER TABLE语句的使用方法,  MySQL ALTER语法如下: ALTER [IGNORE] TABLE tbl_name alter_spec...

Global site tag (gtag.js) - Google Analytics