ホームページ  >  記事  >  データベース  >  pt-online-schema-change は MySQL テーブルの主キーを変更します

pt-online-schema-change は MySQL テーブルの主キーを変更します

高洛峰
高洛峰オリジナル
2016-10-29 10:53:231892ブラウズ

しばらくビジネスを実行した後、元の主キーの設定が妥当ではないことがわかり、この時点で主キーを変更したいと思いました。この種の需要は、実際の生産においても依然として非常に大きいです。

それでは、pt-online-schema-change がこの種の問題をどのように解決するかを見てみましょう。

まず、テストテーブルを作成します

create table t2(c1 int Primary Key, c2 int);

テストデータを構築します

delimiter //
create procedure p1()
begin
  declare v1 int default 1;
  set autocommit=0;
  while v1 <=100000 do
    insert into test.t2(c1,c2) values(v1,v1+100);
    set v1=v1+1;
    if v1%1000 =0 then
      commit;
    end if;
  end while;
end //
delimiter ;
call p1;

次に、pt-online-schema-change を使用して t2 を変更しますtable 主キーを変更します

1. 列 c1 に一意のキーを追加します

# pt-online-schema-change --execute --alter "modify c1 int unique key" --print D=test,t=t2

このとき、テーブルt2のテーブル構造は以下の通りです。

mysql> show create table t2\G
*************************** 1. row ***************************
       Table: t2
Create Table: CREATE TABLE `t2` (
  `c1` int(11) NOT NULL DEFAULT &#39;0&#39;,
  `c2` int(11) DEFAULT NULL,
  PRIMARY KEY (`c1`),
  UNIQUE KEY `c1` (`c1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
row in set (0.03 sec)

2. カラムc1の主キーを削除します

# pt-online-schema-change --execute --alter "drop Primary key" -- no-check-alter - -print D=test,t=t2

注: 主キーを削除するには、--no-check-alter オプションを追加する必要があります

このとき、t2 のテーブル構造は次のようになります次のように:

mysql> show create table t2\G
*************************** 1. row ***************************
       Table: t2
Create Table: CREATE TABLE `t2` (
  `c1` int(11) NOT NULL DEFAULT &#39;0&#39;,
  `c2` int(11) DEFAULT NULL,
  UNIQUE KEY `c1` (`c1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
row in set (0.05 sec)

3. 列 c2 に主キーを追加します

# pt-online-schema-change --execute --alter "modify c2 int Primary key" --print D=test,t=t2

このとき、t2のテーブル構造は以下の通りです:

mysql> show create table t2\G
*************************** 1. row ***************************
       Table: t2
Create Table: CREATE TABLE `t2` (
  `c1` int(11) NOT NULL DEFAULT &#39;0&#39;,
  `c2` int(11) NOT NULL,
  PRIMARY KEY (`c2`),
  UNIQUE KEY `c1` (`c1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
row in set (0.02 sec)

4.

# pt-online-schema-change --execute --alter "drop key c1" --print D=のカラムc1の一意キーを削除します。 test,t=t2

この時点で、t2の主キーの変更は完了です

mysql> show create table t2\G
*************************** 1. row ***************************
       Table: t2
Create Table: CREATE TABLE `t2` (
  `c1` int(11) NOT NULL DEFAULT &#39;0&#39;,
  `c2` int(11) NOT NULL,
  PRIMARY KEY (`c2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
row in set (0.02 sec)


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。