MYSQL – 変更、削除、名前変更、変更

⚡ スマートサマリー

ALTER、DROP、RENAME、MODIFY は MySQL データベースが既に使用されている状態で、その構造を変更するコマンド。これらのコマンドは、既に格納されている行を破棄することなく、テーブルや列などのオブジェクトを追加、削除、名前変更、再定義します。

  • 🛠️ ALTERコマンド: ALTER TABLEは既に存在するオブジェクトを再定義するため、稼働中のスキーマは再構築することなく新しい要件を取り込むことができます。
  • 列を追加: ALTER TABLE ADD COLUMN はフィールドを追加し、既存の行は既に保持していたすべての値を保持します。
  • 🗑️ DROPコマンド: DROP は、データベース、テーブル、または ALTER TABLE DROP COLUMN による単一の列を完全に削除します。
  • 🔁 名前変更コマンド: RENAME TABLEコマンドはテーブル名のみを変更し、テーブル内のデータは失われません。
  • 会<XNUMXxEXNUMX><XNUMXxXNUMXF>️️<XNUMXxXNUMXF>️️ 変更キーワード: CHANGE は、列名の変更と型および制約の再定義を 1 つのステートメントで行うため、両方の列名が必要です。
  • 🧩 変更キーワード: MODIFY は、型と制約を変更しながら、ping 名前は、文字編集のみを行う場合のより安全な選択肢です。
  • 📍 キーワードの後: AFTER は、新しく追加された列をテーブルの末尾ではなく、指定した位置に配置します。

MySQL 変更、削除、名前変更、修正

ALTERコマンドとは何ですか? MySQL?

その 変更する このコマンドは、データベースのライフサイクル中に変更が必要な既存のデータベース、テーブル、ビュー、またはその他のデータベースオブジェクトを変更します。既に作成され、データが格納されたスキーマを進化させるためのコマンドです。

ビジネス要件は常に変化するため、データベース設計もそれに合わせて進化していく必要があります。例えば、Myflixデータベースの設計が実装され、ユーザーが実際に使用し始めた段階で、重要な情報が抜け落ちていたことにチームが気づいたとします。既存のデータ行を失いたくはありません。ただ、新しい情報を既存のデータ行と並べて記録したいだけなのです。

ALTER はまさにそのような状況に対応します。フィールドのデータ型を文字列から数値に変更したり、フィールド名を変更したり、テーブルにまったく新しい列を追加したりすることができ、しかもテーブルに既に格納されているデータはそのまま保持されます。

コマンドの目的が明確になったので、次のステップはそれを実行する構文を作成することです。

MySQL ALTER構文

既存のテーブルに列を追加する際に使用する基本的な構文を以下に示します。

ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;

Pr_media

  • 「ALTER TABLE `テーブル名`」 を伝えるコマンドです MySQL サーバーにアクセスして、「table_name」という名前のテーブルを変更します。
  • 「ADD COLUMN `列名` `データ型`」 を伝えるコマンドです MySQL サーバーに、データ型が `data_type` の新しい列 `column_name` を追加する。

Myflixがオンライン請求と決済を導入したとします。これに対応するため、会員テーブルにクレジットカード番号用のフィールドを追加する必要があります。変更を加える前に、現在のテーブル構造を確認することをお勧めします。以下のスクリプトは、その確認を行うものです。

SHOW COLUMNS FROM `members`;
フィールド タイプ ヌル キー デフォルト 余分
会員番号 int(11) NO PRI NULL 自動増加
フルネーム varchar(350) NO NULL
性別 varchar(6) はい NULL
生年月日 date はい NULL
実在住所 varchar(255) はい NULL
郵便住所 varchar(255) はい NULL
連絡先番号 varchar(75) はい NULL
メール varchar(255) はい NULL

💡 int(11)に関する注記: 括弧内の数字は表示幅のみを表します。 MySQL 8.0.17 では整数型に対して非推奨となったため、最新のサーバーではこの列は単に次のように報告されます。 int型ストレージ容量は変更されていません。

以下のスクリプトは、メンバーテーブルに新しいフィールドを追加します。

ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);

このスクリプトをmyflixdbに対して実行すると、membersテーブルにデータ型がVARCHARのcredit_card_numberという名前の列が追加されます。SHOW COLUMNSスクリプトを再度実行すると、次の結果が得られます。

フィールド タイプ ヌル キー デフォルト 余分
会員番号 int(11) NO PRI NULL 自動増加
フルネーム varchar(350) NO NULL
性別 varchar(6) はい NULL
生年月日 date はい NULL
実在住所 varchar(255) はい NULL
郵便住所 varchar(255) はい NULL
連絡先番号 varchar(75) はい NULL
メール varchar(255) はい NULL
クレジットカード番号 varchar(25) はい NULL

強調表示された行は、credit_card_numberがmembersテーブルに追加されたことを示し、他の列に既に格納されているデータは追加によって変更されていないことを示しています。

列を追加するだけでは半分しか完了しません。スキーマは不要になったオブジェクトを削除する必要もあり、それがDROPコマンドの役割です。

DROPコマンドとは何ですか MySQL?

DROP コマンドはオブジェクトを完全に削除します。

  1. データベースを削除する MySQL .
  2. データベースからテーブルや列などのオブジェクトを削除します。

⚠️ 警告: DROP操作は元に戻せません。バックアップがないと、オブジェクトもその中の行も復元できません。そのため、対象に対してSELECTを実行し、バックアップが正常であることを確認してください。

ドロップping 列

上記のALTERの例では、membersテーブルにcredit_card_numberという列が追加されました。オンライン請求機能が延期され、その列を削除する必要が生じたとします。以下のスクリプトでそれが可能です。

ALTER TABLE `members` DROP COLUMN `credit_card_number`;

スクリプトを実行すると、membersテーブルからcredit_card_number列が削除されます。列を再度一覧表示することで、結果を確認できます。

SHOW COLUMNS FROM `members`;
フィールド タイプ ヌル キー デフォルト 余分
会員番号 int(11) NO PRI NULL 自動増加
フルネーム varchar(350) NO NULL
性別 varchar(6) はい NULL
生年月日 date はい NULL
実在住所 varchar(255) はい NULL
郵便住所 varchar(255) はい NULL
連絡先番号 varchar(75) はい NULL
メール varchar(255) はい NULL

クレジットカード番号が入力欄から削除されました。

ドロップテーブル

データベースからテーブル全体を削除する構文は以下のとおりです。

DROP TABLE `sample_table`;

実際の物体に適用すると、この記述は次のようになります。

DROP TABLE `categories_archive`;

これを実行すると、`categories_archive`という名前のテーブルと、その中のすべての行がデータベースから削除されます。

ドロップデータベース

同じキーワードでスキーマ全体が削除されます。IF EXISTS を追加すると、次のエラーが抑制されます。 MySQL ターゲットが既に存在しない場合に発生する例外で、複数回実行されるスクリプト内で役立ちます。

DROP DATABASE IF EXISTS `myflixdb_backup`;

オブジェクトの削除は最終的な操作です。オブジェクト自体は残しておくべきで、名前だけが間違っている場合は、RENAMEコマンドが適切なツールです。

RENAMEコマンドとは何ですか? MySQL?

RENAMEコマンドは、テーブルや列などの既存のデータベースオブジェクトの名前を新しい名前に変更します。 テーブルの名前を変更しても、テーブルに含まれるデータが失われることはありません。

このコマンドの基本的な構文は以下のとおりです。

RENAME TABLE `current_table_name` TO `new_table_name`;

movierentals テーブルの名前を movie_rentals に変更するには、以下のスクリプトを使用します。

RENAME TABLE `movierentals` TO `movie_rentals`;

このコマンドを実行すると、テーブル名「movierentals」が「movie_rentals」に変更されます。名前の変更はラベルの変更のみなので、同じコマンドを逆に実行すれば元の名前に戻ります。

RENAME TABLE `movie_rentals` TO `movierentals`;

RENAME TABLE はテーブル名を扱います。 の項目に表示されます。そして、その内容を変えるのは、CHANGEキーワードの働きです。

キーワードを変更する

CHANGEキーワードを使用すると、

  1. 列名を変更する
  2. 列のデータ型を変更します
  3. 列の制約を変更する

例を考えてみましょう。以下のスクリプトで確認できるように、members テーブルの full_names フィールドは、幅 350 の varchar データ型です。

SHOW COLUMNS FROM `members`;
フィールド タイプ ヌル キー デフォルト 余分
会員番号 int(11) NO PRI NULL 自動増加
フルネーム varchar(350) NO NULL
性別 varchar(6) はい NULL
生年月日 date はい NULL
実在住所 varchar(255) はい NULL
郵便住所 varchar(255) はい NULL
連絡先番号 varchar(75) はい NULL
メール varchar(255) はい NULL

要件が

  1. フィールド名を「full_names」から「fullname」に変更してください。
  2. データ型を幅250のchar型に変更してください。
  3. NOT NULL制約を追加する

これら3つの編集はすべて、1つのCHANGEステートメントによって実行されます。

ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;

myflixdbに対して実行し、その後SHOW COLUMNSスクリプトを実行すると、次の結果が得られます。

フィールド タイプ ヌル キー デフォルト 余分
会員番号 int(11) NO PRI NULL 自動増加
氏名 char(250) NO NULL
性別 varchar(6) はい NULL
生年月日 date はい NULL
実在住所 varchar(255) はい NULL
郵便住所 varchar(255) はい NULL
連絡先番号 varchar(75) はい NULL
メール varchar(255) はい NULL

この列は現在「fullname」という名前で、char(250)型の値を格納し、NULL値は拒否します。

キーワードの変更

MODIFYキーワードを使用すると、

  1. 列のデータ型を変更します
  2. 列制約を変更する

上記のCHANGEの例では、フィールド名の変更は目的の一部に過ぎないにもかかわらず、フィールド名を2回指定する必要がありました。 CHANGEステートメントからフィールド名を省略するとエラーが発生します。 データ型と制約のみを調整し、名前は変更しない場合は、MODIFYコマンドで列を一度指定するだけで済みます。

以下のスクリプトは、「fullname」フィールドの幅を250から50に変更します。

ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;

myflixdbに対して実行し、その後SHOW COLUMNSスクリプトを実行すると、以下に示す結果が得られます。

フィールド タイプ ヌル キー デフォルト 余分
会員番号 int(11) NO PRI NULL 自動増加
氏名 char(50) NO NULL
性別 varchar(6) はい NULL
生年月日 date はい NULL
実在住所 varchar(255) はい NULL
郵便住所 varchar(255) はい NULL
連絡先番号 varchar(75) はい NULL
メール varchar(255) はい NULL

⚠️ 警告: 列幅を狭めると、収まらなくなったデータが切り捨てられます。50 文字を超える名前はすべてこのステートメントによって切り捨てられるため、最長の既存の値をチェックしてください。 SELECT フィールドを縮小する前にクエリを実行します。

列の変更、修正、名前変更

これら3つのキーワードは重複しており、間違ったキーワードを選択することが、この分野で最もよくある間違いの原因です。下の表は、それらを並べて表示したものです。

キーワード 列名を変更します 型と制約を変更します 旧姓(必須) 典型的な使用
CHANGE はい はい はい、それに加えて新しい名前です 1つのステートメントで名前と定義を変更
変更 いいえ はい 名前は一度だけ与えられます 列の幅を広げる、狭める、または再入力する
列名の変更 はい いいえ はい、それに加えて新しい名前です 名前のみ変更、 MySQL 8.0年以降

MySQL 8.0では、最も単純なケースとして、再定義を一切行わずに名前を変更するという4つ目のオプションが追加されました。

ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;

型と名前は決定済みです。残る問題は、新しい列がテーブル内のどこに配置されるかであり、これはAFTERキーワードによって制御されます。

AFTERキーワード

デフォルトでは、ALTER TABLE コマンドで追加された列はテーブルの末尾に配置されます。特定の位置に配置するには、ALTER コマンドに AFTER キーワードを組み合わせて使用​​します。

以下のスクリプトは、メンバーテーブルの「date_of_birth」の直後に「date_of_registration」を追加します。

ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;

myflixdbに対して実行し、その後SHOW COLUMNSスクリプトを実行すると、以下に示す結果が得られます。

フィールド タイプ ヌル キー デフォルト 余分
会員番号 int(11) NO PRI NULL 自動増加
氏名 char(50) NO NULL
性別 varchar(6) はい NULL
生年月日 date はい NULL
登録日 date はい NULL
実在住所 varchar(255) はい NULL
郵便住所 varchar(255) はい NULL
連絡先番号 varchar(75) はい NULL
メール varchar(255) はい NULL

強調表示されている行は、date_of_birth の後に追加された列です。キーワード FIRST も同様に機能し、新しい列をテーブルの先頭に移動します。

よくあるご質問

いいえ。ALTER、DROP、RENAMEなどのDDLステートメントは暗黙的にコミットします。 MySQLそのため、開いているトランザクションではそれらを元に戻すことはできません。バックアップからの復元が唯一の復旧方法です。

変更内容によります。InnoDBの変更の多くはオンラインで実行され、同時読み取りと書き込みが可能ですが、テーブル全体をコピーしてブロック書き込みを行うものもあります。ALGORITHM句とLOCK句を追加して、受け入れる処理を指定してください。

DROPはオブジェクト自体を削除します。TRUNCATEはテーブルを空にしますが、その構造は保持します。 DELETE 選択した行を削除し、WHERE句でフィルタリングできます。

通常はそうです。クライアントに組み込まれたAIアシスタントは、 MySQL ワークベンチ 「date_of_birth の後に null 許容の日付列を追加する」といったリクエストを有効な構文に変換します。 Rev実行する前に、生成されたステートメントを実際のスキーマに対して確認してください。

部分的にしか対応できません。AIによるレビューツールは、クエリ内で名前が付けられたまま削除された列や、データを切り捨てる狭められた型など、明らかなリスクを検出します。しかし、すべての呼び出し元を監視できるわけではないため、ステージング実行は依然として必要です。